1.加载一个模型
Ogre::Entity* ent = mSceneMgr->createEntity("MyEntity","Sinbad.mesh");
mSceneMgr->getRootSceneNode()->attachObject(ent);
ent:指向一个实例的指针.
mSceneMrg:指向一个场景管理器.
"MyEntity":为自己的实例取个名称.
"Sinbad.mesh":导入mesh文件的名称.
getRootSceneNode():获取场景根节点.
attachObject(ent):把ent(指针)实例加入到根节点.
2.创建场景节点
Ogre::SceneNode* node = mSceneMgr->createSceneNode("Node1");
mSceneMgr->getRootSceneNode()->addChild(node);
node->attachObject(ent);
node:指向一个场景节点的指针.
createSceneNode("Node1"):初始化一个场景节点,名字为Node1.
addChild(node):把node加入到场景根节点,作为它的一个子节点.
3.设置场景结点的位置
node->setPosition(10,0,0);
setPosition(10,0,0):把node节点设在父空间坐标系(10,0,0)上.
node2->pitch(Ogre::Radian(Ogre::Math::HALF_PI));
pitch:绕着X轴进行旋转.
Radian:表示括号后的是弧度.
node3->translate(20,0,0);
node3->yaw(Ogre::Degree(90.0f));
node4->roll(Ogre::Radian(Ogre::Math::HALF_PI));
translate:表示场景节点node3相对于父节点空间的当前位置移动(20,0,0).但是如果加上参数Ogre::Node::TS_WORLD,则代表在世界坐标移动一段距离.
注意:空间分为世界空间,父空间和局部空间.
yaw:表示绕着Y轴逆时针旋转.
Ogre::Degree:表示要旋转的角度,而不是弧度.
roll:表示绕着Z轴旋转.
4.缩放场景节点
node2->scale(2.0f,2.0f,2.0f);
node2->setScale(2.0f,2.0f,2.0f);
scale:对场景节点进行缩放.
setScale:setScale与scale的关系相当于setPosition和translate的关系.
注意:从严格意义上说,场景结点是不能缩放的,它只保存着不被渲染元数据.更严格的说每个渲染的对象将会代替原有结点造成缩放.
Ogre::SceneNode* node3 = node->createChildSceneNode("node3",Ogre::Vector3(20,0,0));
createChildSceneNode:创建了node的一个子节点,第一个参数是子节点的名称,第二个参数是node3节点出现在世界坐标系的位置.
以上代码相当于:
Ogre::SceneNode* node3 = mSceneMgr->createSceneNode("node3");
node->addChild(node3);
node3->setPosition(20,0,0);
注意:一个父结点的变换将会传递给它所有的子结点.