第二章 OGRE中的平移与旋转

#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









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值