2010-03-29 2 views
1

У меня настоящая головная боль, пытаясь установить 44 местную локацию узла в соответствии с данным миром.3D World to Local transform

Я получил решение, но, AFAICS, он принимает во внимание только ориентации и позиции но НЕ масштабировании:

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

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

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

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

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

Билл

ответ

1

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

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

где _getFullTransform().inverse() является полным 4 x 4 обратным node_parents преобразования.

EDIT: Возможно, вам стоит просто использовать _setDerivedPosition, который выполняет именно то, что вы пытаетесь выполнить.

+0

Я не думал, что все будет так просто! Благодаря! –

+0

@Bill Иногда вам повезет;) –