Получение абсолютного положения и поворота изнутри графа сцены? - PullRequest
1 голос
/ 09 декабря 2008

Итак, я столкнулся с этой проблемой несколько раз:

У меня есть некоторый объект в моем графике 3D сцены, который является потомком какого-то другого объекта. Давайте назовем их c (ребенок) и p (родитель).

позиция c определяется относительно p. Таким образом, c может иметь позицию (1,0,0), но, конечно, из-за того, что p имеет какую-то другую позицию, скажем (1,2,3), он фактически не отображается в оригинале нашего мира, но в (2 , 2,3).

Теперь, скажем, почему-то мы хотим узнать абсолютное положение c в мировых координатах (или вращение, проблема та же), как это обычно делается?

Должен ли c знать о своем родителе и иметь возможность запросить эту позицию и добавить ее в свою собственную, наконец, возвращая абсолютную позицию?

Ответы [ 2 ]

4 голосов
/ 09 декабря 2008

Преобразование координат в дочерней системе координат в глобальную систему координат - это одна из вещей, которая необходима для фактического рендеринга графа сцены, поэтому это разумная вещь.

Как вы это сделаете, будет зависеть от используемой вами графической библиотеки. Часто каждый узел в графе сцены содержит матрицу, которая преобразует систему координат этого узла в глобальные координаты. Эта матрица рассчитывается путем умножения матрицы из родительского узла на матрицу преобразования из родительских координат в дочерние координаты или наоборот, в зависимости от того, как все определено.

Если у вас есть подобная матрица, вы можете выполнить необходимые вычисления, умножив точку в дочерних координатах на матрицу узла. Опять же, порядок важен здесь.

1 голос
/ 09 декабря 2008

ИМХО, родительские объекты чаще знают о своих детях, чем наоборот. То, что вам подходит, зависит от того, должен ли ребенок знать свою собственную позицию, или ему нужен какой-то другой алгоритм обхода внешнего дерева.

Кроме того, я не думаю, что поворот можно обрабатывать так же, как перевод. Если родительский объект повернут, он также переведет позицию дочернего объекта. Следовательно, почему большинство 3D-систем используют однородные координаты, которые используют (4x4) матрицы преобразования, которые объединяют вращения и сдвиги в одной матрице.

...