2010-03-29 76 views
1

我有一個真正的頭痛試圖設置節點的本地位置匹配給定的世界的位置。3D世界到本地轉換

我得到了一個解決方案,但是,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()node_parents4 x 4逆轉變。

編輯:它看起來也許你應該只是使用_setDerivedPosition這正是你想要完成。

+0

我沒有想象它會那麼簡單!謝謝! – 2010-03-29 11:47:14

+0

@Bill有時你很幸運;) – 2010-03-29 11:48:35