Math 三维世界到局部变换

Math 三维世界到局部变换,math,3d,ogre3d,Math,3d,Ogre3d,试图将节点的本地位置设置为与给定的世界位置相匹配,我真的很头疼 我得到了一个解决方案,但是,AFAICS,它只考虑了方向和位置,但不考虑缩放: node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() ); 所讨论的节点是节点_父节点的子节点;节点的父级局部和派生的属性(方向、位置和缩放)以及其全

试图将节点的本地位置设置为与给定的世界位置相匹配,我真的很头疼

我得到了一个解决方案,但是,AFAICS,它只考虑了方向位置,但不考虑缩放

node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() );
所讨论的节点是节点_父节点的子节点;节点的父级局部派生的属性(方向、位置和缩放)以及其全矩阵变换都是已知的

所有位置均为三维矢量;方向是一个四元数;完整变换是一个4x4矩阵

有人能帮我修改解决方案以支持节点层次结构中的缩放吗

多谢各位


比尔

我不是食人魔3D方面的专家,但我想你需要一些类似的东西:

 node_new_local_position =  node_parent._getFullTransform ().inverse() * world_position_to_match;
其中
\u getFullTransform().inverse()
节点\u父节点
变换的完整
4 x 4


编辑:看起来你应该使用
\u setDerivedPosition
,这正是你想要完成的。

我不是ogre3d方面的专家,但我想你需要这样的东西:

 node_new_local_position =  node_parent._getFullTransform ().inverse() * world_position_to_match;
其中
\u getFullTransform().inverse()
节点\u父节点
变换的完整
4 x 4


编辑:看起来你应该使用
\u setDerivedPosition
来完成你想要完成的事情。

我没想到会这么简单!谢谢@比尔:有时候你会很幸运我没想到会这么简单!谢谢@比尔:有时候你会很幸运