Ogre空间变换,setPosition(),setDerivedPosition()和translate()的正确使用。

来源:互联网 发布:java 日志slj4j 编辑:程序博客网 时间:2024/05/21 11:15

在Ogre里,节点的位置移动可以使用Node::setPosition(p)和Node::translate(p1,p2)来个空间变换函数,其中设置位置函数setPosition() 只有一个参数—一个三维坐标点,它是相对

要移动节点的父节点而言的。
相对父节点位置偏移的例子(以父节点的位置为坐标原点):
ParentNode   WorldPosition(0,10,0)
ChildNode      setPosition(0,10,-10)—>WorldPosition(0,20,-10)
然而setDeriverdPosition()是设置该节点的世界绝对坐标的,
相对世界坐标原点位置偏移的例子(设定在世界坐标的位置):
ParentNode   WorldPosition(0,10,0)
ChildNode      setDeriverdPosition(0,10,-10)—>WorldPosition(0,10,-10)与其他任何节点都没有关系!
 
最后说说 tanslate(p1,p2),它是相对父节点移动的,两个参数,其中一个是移动量(三维向量),另一个是参考空间TransfromSpace,这个参考空间是决定移动方向的。其中有世界空间,父空间,本地空间。最终决定移动方向的是这三个参考空间的当前朝向
 
在实现第一人称控制角色中,选用的参考空间便是本地空间,因为角色是会跟随鼠标的移动而切换朝向的,即节点的本地坐标空间总是
在变化的,要想让角色朝着自己的“前后左右”移动,就需要用自身的坐标空间来确定移动方向了。