3D мир в локальную трансформацию - PullRequest
1 голос
/ 29 марта 2010

У меня настоящая головная боль, когда я пытаюсь установить локальную позицию узла в соответствии с миром позицией.

Мне дали решение, но, AFAICS, оно учитывает только ориентацию и положение , но НЕ масштабирование :

node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() );

Рассматриваемый узел является дочерним по отношению к node_parent ; Известны свойства node_parent local и (ориентация, положение и масштабирование), а также полное матричное преобразование .

Все позиции 3d векторов ; ориентация: кватернион ; полное преобразование - матрица 4x4.

Может кто-нибудь помочь мне изменить решение для поддержки масштабирования в иерархии узлов?

Заранее большое спасибо,

Bill

1 Ответ

1 голос
/ 29 марта 2010

Я не эксперт в ogre3d, но, думаю, вам понадобится что-то вроде:

 node_new_local_position =  node_parent._getFullTransform ().inverse() * world_position_to_match;

, где _getFullTransform ().inverse() - полное 4 x 4 обратное преобразование node_parents.

РЕДАКТИРОВАТЬ: Похоже, вы должны просто использовать _setDerivedPosition, который делает именно то, что вы пытаетесь достичь.

...