#include "ExampleApplication.h"
class Example1:public ExampleApplication
{
public:
void createScene()
{
//1 begin
/*
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","Sinbad.mesh");
mSceneMgr->getRootSceneNode()->attachObject(ent);*/
//1 end
/*
//2|1 begin
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","Sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->createSceneNode("Node1");
mSceneMgr->getRootSceneNode()->addChild(node);
node->attachObject(ent);
//2|1 end
//3_2 begin
node->setPosition(10,0,0);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
Ogre::SceneNode* node2=mSceneMgr->createSceneNode("Node2");
node->addChild(node2);
node2->setPosition(0,10,20);//Note that this position is relative to the parent,MyEntity2 will be at (10,10,20)
node2->attachObject(ent2);
//3_2 end*/
//4|all begin
/*
Ogre::Entity* ent1=mSceneMgr->createEntity("MyEntity1","Sinbad.mesh");
Ogre::SceneNode* node1=mSceneMgr->createSceneNode("Node1");
node1->setPosition(10,0,0);
mSceneMgr->getRootSceneNode()->addChild(node1);
node1->attachObject(ent1);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
Ogre::SceneNode* node2=mSceneMgr->createSceneNode("Node2");
node2->setPosition(10,0,0);
node1->addChild(node2);
node2->pitch(Ogre::Radian(Ogre::Math::HALF_PI));//the parameter type the pitch function used is radian,do is the yaw,roll function
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");
Ogre::SceneNode* node3=mSceneMgr->createSceneNode("Node3");
node1->addChild(node3);
node3->setPosition(20,0,0);//The difference between setPostion(x,y,z) and translate(x,y,z) is
//that setPostion sets the position- no surprises here.translate adds the given values to the
//position of the scene node,If a scene node has the position (10,20,30) and we call setPosition(20,0,0),
//the node will then have the position(30,20,10).On the other hand,if we call translate(30,20,10),
//the node will have the position (40,40,40).
node3->yaw(Ogre::Degree(90.0f));//Pitch and yaw still need a radian to be used,However,Ogre 3D offers
//the class Degree(),which has a cast operator so the compiler can automatically cast into a Radian().
//类型转换函数:将自己转换成其它类型的数据
node3->attachObject(ent3);
Ogre::Entity* ent4=mSceneMgr->createEntity("MyEntity4","Sinbad.mesh");
Ogre::SceneNode* node4=mSceneMgr->createSceneNode("Node4");
node1->addChild(node4);
node4->setPosition(30,0,0);
node4->roll(Ogre::Radian(Ogre::Math::HALF_PI));
node4->attachObject(ent4);*/
//4|all end
//5|all begin
/*
Ogre::Entity* ent1=mSceneMgr->createEntity("MyEntity1","Sinbad.mesh");
Ogre::SceneNode* node1=mSceneMgr->createSceneNode("Node1");
mSceneMgr->getRootSceneNode()->addChild(node1);
node1->attachObject(ent1);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
Ogre::SceneNode* node2=node1->createChildSceneNode("Node2");
node2->setPosition(10,0,0);
node2->attachObject(ent2);
node2->scale(2.0f,2.0f,2.0f);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");
Ogre::SceneNode* node3=node1->createChildSceneNode("Node3",Ogre::Vector3(20,0,0));
node3->attachObject(ent3);
node3->scale(0.2f,0.2f,0.2f);//Besides scale(), there is also setScale(). The difference between these functions is
//the same as between setPosition() and translate().*/
//5|all end
//6|all begin
/*
Ogre::Entity* ent1=mSceneMgr->createEntity("MyEntity1","Sinbad.mesh");
Ogre::SceneNode* node1=mSceneMgr->createSceneNode("Node1");
node1->setPosition(10,10,0);
mSceneMgr->getRootSceneNode()->addChild(node1);
node1->attachObject(ent1);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","ninja.mesh");
Ogre::SceneNode* node2=node1->createChildSceneNode("Node2");
node2->setPosition(10,0,0);
node2->setScale(0.02f,0.02f,0.02f);
node2->attachObject(ent2);
//6|all end
//7_6 begin
node1->setPosition(40,10,0);//ninja is still on the right of Sinbad
node1->yaw(Ogre::Degree(180.0f));//ninja is on the left of the Sinbad,the transformation of a
//parent is passed to all its children*/
//7_6 end
//8|all begin
/*
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1",Ogre::Vector3(0,0,400));
node->yaw(Ogre::Degree(180.0f));
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
Ogre::SceneNode* node2=node->createChildSceneNode("Node2");
node2->setPosition(10,0,0);
node2->translate(0,0,10);
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->setPosition(20,0,0);
node3->translate(0,0,10);//translate默认是父空间下进行平移
//node3->translate(0,0,10,Ogre::Node::TS_WORLD);
node3->attachObject(ent3);*/
//8|all end
//9|all begin
/*
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->createSceneNode("Node1");
node->setPosition(0,0,400);
node->yaw(Ogre::Degree(180.0f));
mSceneMgr->getRootSceneNode()->addChild(node);
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","sinbad.mesh");
Ogre::SceneNode* node2=node->createChildSceneNode("Node2");
node2->yaw(Ogre::Degree(45));
node2->translate(0,0,20);
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->yaw(Ogre::Degree(45));
node3->translate(0,0,20,Ogre::Node::TS_LOCAL);
node3->attachObject(ent3);*/
//9|all end
//10|all begin
/*
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->createSceneNode("Node1");
node->setPosition(0,0,400);
node->yaw(Ogre::Degree(180.0f));
mSceneMgr->getRootSceneNode()->addChild(node);
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","sinbad.mesh");
Ogre::SceneNode* node2=node->createChildSceneNode("Node2");
node2->yaw(Ogre::Degree(-45));
node2->translate(0,0,20,Ogre::Node::TS_LOCAL);
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->yaw(Ogre::Degree(45));
node3->translate(0,0,20,Ogre::Node::TS_LOCAL);
node3->attachObject(ent3);*/
//10|all end
//11|all begin
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1");
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","sinbad.mesh");
Ogre::SceneNode* node2=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node2",Ogre::Vector3(10,0,0));
node2->yaw(Ogre::Degree(90.0f));//旋转默认使用的是局部空间
node2->roll(Ogre::Degree(90.0f));
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->setPosition(20,0,0);
node3->yaw(Ogre::Degree(90),Ogre::Node::TS_WORLD);
node3->roll(Ogre::Degree(90),Ogre::Node::TS_WORLD);
node3->attachObject(ent3);
//11|all end
}
};
int main()
{
Example1 app;
app.go();
return 0;
}
先看第8段
//8|all begin
/*
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1",Ogre::Vector3(0,0,400));
node->yaw(Ogre::Degree(180.0f));
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","Sinbad.mesh");
Ogre::SceneNode* node2=node->createChildSceneNode("Node2");
node2->setPosition(10,0,0);
node2->translate(0,0,10);
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","Sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->setPosition(20,0,0);
node3->translate(0,0,10);//translate默认是父空间下进行平移
//node3->translate(0,0,10,Ogre::Node::TS_WORLD);
node3->attachObject(ent3);*/
//8|all end
再看第11段
//11|all begin
Ogre::Entity* ent=mSceneMgr->createEntity("MyEntity","sinbad.mesh");
Ogre::SceneNode* node=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1");
node->attachObject(ent);
Ogre::Entity* ent2=mSceneMgr->createEntity("MyEntity2","sinbad.mesh");
Ogre::SceneNode* node2=mSceneMgr->getRootSceneNode()->createChildSceneNode("Node2",Ogre::Vector3(10,0,0));
node2->yaw(Ogre::Degree(90.0f));//旋转默认使用的是局部空间
node2->roll(Ogre::Degree(90.0f));
node2->attachObject(ent2);
Ogre::Entity* ent3=mSceneMgr->createEntity("MyEntity3","sinbad.mesh");
Ogre::SceneNode* node3=node->createChildSceneNode("Node3");
node3->setPosition(20,0,0);
node3->yaw(Ogre::Degree(90),Ogre::Node::TS_WORLD);
node3->roll(Ogre::Degree(90),Ogre::Node::TS_WORLD);
node3->attachObject(ent3);
//11|all end