如果有疑问或发现错误可发E-Mail联系:[email protected], 谢谢!
空间坐标系统及其操作:
上一节已经提到了对节点的位置操作,如绕Y轴旋转90度:yaw(Degree(90.0))
但是这一节详细的讲解关于Ogre中的3D空间操作。
图OgreSpace
上图是Ogre中的坐标系统,竖直方向是Y轴,左右为X轴,垂直用户界面的是Z轴。这个图我们必须要时刻了然于胸否则很容易方向混乱。
这里主要以translate()这个函数进行讲解,以形象说明在Ogre中是如何操作3D空间的。
translate(变量1,变量2)主要有两个参数。
变量1:类型是Vector3,Vector3有三个变量:x、y、z。有时我们为了简便常写为translate(x,y,x,变量2),当然,也可以写为:translate(Ogre::Vector3(x,y,z),变量2)。
变量2:类型是(enum枚举)TransformSpace,其有三个可选值TS_LOCAL(局部空间)、TS_PARENT(父空间)、TS_WORLD(全局空间) ,在默认情况下,TransformSpace值是TS_PARENT。
假设有三个节点:Node、Node2、Node3。Node的2、3的父节点,2、3是兄弟节点。
由于只是想说明空间的问题,所以我只给出了对模型位置的移动操作,而没有写旋转操作,它们与translate一样也是两个主要参数,分别是角度(或弧度)、坐标系统。
如:yaw(Ogre::Degree(45),Ogre::Node::TS_LOCAL)。
可以参考具体代码查看效果图:
#include"ExampleApplication.h"
usingnamespaceOgre;
classexample1 :publicExampleApplication
{
protected:
voidcreateScene()
{
Entity *ent = mSceneMgr->createEntity("MyEntity","Sinbad.mesh");
SceneNode*node =mSceneMgr->createSceneNode("Node1");
node->setPosition(0,0,0);
mSceneMgr->getRootSceneNode()->addChild(node);
node->attachObject(ent);
//Parent Space is defult
Entity *ent2 = mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
SceneNode *node2 = node->createChildSceneNode("node2");
node2->yaw(Ogre::Degree(45));
node2->translate(0,0,20,Ogre::Node::TS_PARENT);
node2->attachObject(ent2);
//Local Space
Entity *ent3 = mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");
SceneNode *node3 = node->createChildSceneNode("node3");
node3->yaw(Ogre::Degree(45));
node3->translate(0,0,20,Ogre::Node::TS_LOCAL);
node3->attachObject(ent3);
}
public:
example1(){}
~example1(){}
};
int main()
{
example1ex1;
ex1.go();
return0;
}
我以简单图示表示效果 ——Local& Parent
如下图: