我真的很头疼,试图将节点的本地位置设置为匹配给定的世界位置。
我获得了一个解决方案,但是,AFAICS,它只考虑方向和位置,但不缩放:
node_new_local_position = node_parent.derivedOrientation().Inverse() * ( world_position_to_match - node_parent.derivedPosition() );
有问题的节点是 node_parent 的子节点; node_parent 局部和派生属性(方向,位置和缩放)是已知的,以及全矩阵变换。
所有位置都是 3d矢量;方向是四元数;完全变换是一个4x4矩阵。
有人可以帮我修改解决方案以支持节点层次结构中的扩展吗?
非常感谢,
比尔
答案 0 :(得分:1)
我不是ogre3d的专家,但我想你需要这样的东西:
node_new_local_position = node_parent._getFullTransform ().inverse() * world_position_to_match;
其中_getFullTransform ().inverse()
是4 x 4
转换的完整node_parents
倒数。
编辑:看起来你应该只使用_setDerivedPosition
来完成你想要完成的任务。