在做3D编程的时候,很多时候会计算一个点相对于于另一个点的局部坐标.通常的做法是利用矩阵或者其它的操作方法.这里提出一个非常简单的方法,不用涉及到矩阵,思路也比较简单,代码更简单.效率也许不比较差.上代码:
/* getLocalPosition 计算pOtherNode相对于pRefNode的局部坐标 */ Ogre::Vector3 getLocalPosition(Ogre::SceneNode* pRefNode,
Ogre::SceneNode* pOtherNode) { //直接获得第二个节点的世界坐标 Vector3 WorldPos = pOtherNode->getWorldPosition(); //在第一个节点上创建一个节点
//让Ogre为我们指定名字,以免重复
Ogre::SceneNode * tpNode = pRefNode->createChildSceneNode(); //使其世界坐标跟第二个节点的世界坐标一样 tpNode->translate(WorldPos,Ogre::Node::TS_WORLD); //取得临时节点相对于父节点的坐标 Vector3 result = tpNode->getPosition(); pRefNode->getCreator()->destroySceneNode(tpNode->getName()); return result; }
个人从理论的角度觉得这个方法正确,如果有人看到,希望能给点评论,指出错误.
暂且不考虑效率问题....
在开发中就想这样用,不用矩阵或四元数.
By:洪庚伟