博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ogre 2011-11-30
阅读量:6438 次
发布时间:2019-06-23

本文共 11513 字,大约阅读时间需要 38 分钟。

自己创建scene manager,载入bsp地图

class MyApplication :public ExampleApplication{public:	MyApplication() {}	~MyApplication()	{	}	void createScene()	{		std::cout<
getTypeName()<<"::"<
getName()<
createSceneManager("BspSceneManager"); // tell the bsp scene manager to load a map saved in the bsp file format mSceneMgr->setWorldGeometry("maps/chiropteradm.bsp"); }private:};int main(){ MyApplication app; app.go(); return 0;}

 

 用quad加材质图画草

class MyApplication :public ExampleApplication{public:	MyApplication() {}	~MyApplication()	{}	void createScene()	{		// 先用定义的平面创建一个网格,再用创建的网格构造一个实体		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -10);		Ogre::MeshManager::getSingleton().createPlane("plane", 			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,			plane,			1500, 1500, 200, 200,			true, 1, 5, 5, Ogre::Vector3::UNIT_Z);		Ogre::Entity* entity = mSceneMgr->createEntity("grasspalne", "plane");		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entity);		// 设置材质		entity->setMaterialName("Examples/GrassFloor");		// 创建方向光		Ogre::Light* light = mSceneMgr->createLight("light1");		light->setType(Ogre::Light::LT_DIRECTIONAL);		light->setDirection(Ogre::Vector3(1, -1, 0));		// 用manual object 绘制自己定义的物体		Ogre::ManualObject* manual = mSceneMgr->createManualObject("grass");		// param1--渲染manual object用到的材质(纹理)图		// param2--顶点的格式		manual->begin("Examples/GrassBlades", RenderOperation::OT_TRIANGLE_LIST);		manual->position(5.0, 10.0, 0.0);		manual->textureCoord(1, 0);		manual->position(-5.0, -10.0, 0.0);		manual->textureCoord(0, 1);		manual->position(-5.0, 10.0, 0.0);		manual->textureCoord(0, 0);		// second triangle		manual->position(5.0, -10.0, 0.0);		manual->textureCoord(1, 1);		manual->position(5.0, 10.0, 0.0);		manual->textureCoord(1, 0);		manual->position(-5.0, -10.0, 0.0);		manual->textureCoord(0, 1);		manual->end();		Ogre::SceneNode* grassNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("grassnode2");		grassNode->attachObject(manual);	}};

  

画三个quad的草,每个quad之间夹角为60度

class MyApplication :public ExampleApplication{public:	MyApplication() {}	~MyApplication()	{}	void createScene()	{		// 先用定义的平面创建一个网格,再用创建的网格构造一个实体		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -10);		Ogre::MeshManager::getSingleton().createPlane("plane", 			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,			plane,			1500, 1500, 200, 200,			true, 1, 5, 5, Ogre::Vector3::UNIT_Z);		Ogre::Entity* entity = mSceneMgr->createEntity("grasspalne", "plane");		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entity);		// 设置材质		entity->setMaterialName("Examples/GrassFloor");		// 创建方向光		Ogre::Light* light = mSceneMgr->createLight("light1");		light->setType(Ogre::Light::LT_DIRECTIONAL);		light->setDirection(Ogre::Vector3(1, -1, 0));		// 用manual object 绘制自己定义的物体		Ogre::ManualObject* manual = mSceneMgr->createManualObject("grass");		// param1--渲染manual object用到的材质(纹理)图		// param2--顶点的格式		manual->begin("Examples/GrassBlades", RenderOperation::OT_TRIANGLE_LIST);		// first triangle		manual->position(5.0, 10.0, 0.0);		manual->textureCoord(1, 0);		manual->position(-5.0, 0.0, 0.0);		manual->textureCoord(0, 1);		manual->position(-5.0, 10.0, 0.0);		manual->textureCoord(0, 0);		// second triangle		manual->position(5.0, 0.0, 0.0);		manual->textureCoord(1, 1);		manual->position(5.0, 10.0, 0.0);		manual->textureCoord(1, 0);		manual->position(-5.0, 0.0, 0.0);		manual->textureCoord(0, 1);		// third triangle		manual->position(2.5, 0.0, 4.3);		manual->textureCoord(1, 1);		manual->position(-2.5, 10.0, -4.3);		manual->textureCoord(0, 0);		manual->position(-2.5, 0.0, -4.3);		manual->textureCoord(0, 1);		// fourth triangle		manual->position(2.5, 0.0, 4.3);		manual->textureCoord(1, 1);		manual->position(2.5, 10.0, 4.3);		manual->textureCoord(1, 0);		manual->position(-2.5, 10.0, -4.3);		manual->textureCoord(0 ,0);		//fifth triangle		manual->position(2.5, 0.0, -4.3);		manual->textureCoord(1 ,1);		manual->position(-2.5, 10.0, 4.3);		manual->textureCoord(0, 0);		manual->position(-2.5, 0.0, 4.3);		manual->textureCoord(0, 1);		//sixth triangle		manual->position(2.5, 0.0, -4.3);		manual->textureCoord(1, 1);		manual->position(-2.5, 10.0 ,4.3);		manual->textureCoord(0, 0);		manual->position(2.5, 10.0, -4.3);		manual->textureCoord(1, 0);		manual->end();		Ogre::SceneNode* grassNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("grassnode2");		grassNode->attachObject(manual);	}};

  

画50*50的草

1 class MyApplication :public ExampleApplication  2 {
3 public: 4 MyApplication() {} 5 ~MyApplication() 6 {} 7 8 void createScene() 9 {
10 // 先用定义的平面创建一个网格,再用创建的网格构造一个实体 11 Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -10); 12 Ogre::MeshManager::getSingleton().createPlane("plane", 13 ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, 14 plane, 15 1500, 1500, 200, 200, 16 true, 1, 5, 5, Ogre::Vector3::UNIT_Z); 17 Ogre::Entity* entity = mSceneMgr->createEntity("grasspalne", "plane"); 18 mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entity); 19 // 设置材质 20 entity->setMaterialName("Examples/GrassFloor"); 21 // 创建方向光 22 Ogre::Light* light = mSceneMgr->createLight("light1"); 23 light->setType(Ogre::Light::LT_DIRECTIONAL); 24 light->setDirection(Ogre::Vector3(1, -1, 0)); 25 26 // 用manual object 绘制自己定义的物体 27 Ogre::ManualObject* manual = mSceneMgr->createManualObject("grass"); 28 // param1--渲染manual object用到的材质(纹理)图 29 // param2--顶点的格式 30 manual->begin("Examples/GrassBlades", RenderOperation::OT_TRIANGLE_LIST); 31 32 33 // first triangle 34 manual->position(5.0, 10.0, 0.0); 35 manual->textureCoord(1, 0); 36 manual->position(-5.0, 0.0, 0.0); 37 manual->textureCoord(0, 1); 38 manual->position(-5.0, 10.0, 0.0); 39 manual->textureCoord(0, 0); 40 // second triangle 41 manual->position(5.0, 0.0, 0.0); 42 manual->textureCoord(1, 1); 43 manual->position(5.0, 10.0, 0.0); 44 manual->textureCoord(1, 0); 45 manual->position(-5.0, 0.0, 0.0); 46 manual->textureCoord(0, 1); 47 48 // third triangle 49 manual->position(2.5, 0.0, 4.3); 50 manual->textureCoord(1, 1); 51 manual->position(-2.5, 10.0, -4.3); 52 manual->textureCoord(0, 0); 53 manual->position(-2.5, 0.0, -4.3); 54 manual->textureCoord(0, 1); 55 // fourth triangle 56 manual->position(2.5, 0.0, 4.3); 57 manual->textureCoord(1, 1); 58 manual->position(2.5, 10.0, 4.3); 59 manual->textureCoord(1, 0); 60 manual->position(-2.5, 10.0, -4.3); 61 manual->textureCoord(0 ,0); 62 63 //fifth triangle 64 manual->position(2.5, 0.0, -4.3); 65 manual->textureCoord(1 ,1); 66 manual->position(-2.5, 10.0, 4.3); 67 manual->textureCoord(0, 0); 68 manual->position(-2.5, 0.0, 4.3); 69 manual->textureCoord(0, 1); 70 //sixth triangle 71 manual->position(2.5, 0.0, -4.3); 72 manual->textureCoord(1, 1); 73 manual->position(-2.5, 10.0 ,4.3); 74 manual->textureCoord(0, 0); 75 manual->position(2.5, 10.0, -4.3); 76 manual->textureCoord(1, 0); 77 78 manual->end(); 79 80 //Ogre::SceneNode* grassNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("grassnode2"); 81 //grassNode->attachObject(manual); 82 83 //Convert this object to a Mesh 84 manual->convertToMesh("BladeOfGrass"); 85 std::stringstream os; 86 for (int i=0 ;i<50; ++i) 87 {
88 for (int j=0; j<50; ++j) 89 {
90 os<<
createEntity(os.str(), "BladeOfGrass"); 92 Ogre::SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode( 93 os.str(), Ogre::Vector3(i * 3, -10, j * 3)); 94 node->attachObject(ent); 95 } 96 } 97 } 98 };

 

用索引列表表示三角形+StaticGeometry 提高渲染效率

class MyApplication :public ExampleApplication{public:	MyApplication() {}	~MyApplication()	{}	void createScene()	{		// 先用定义的平面创建一个网格,再用创建的网格构造一个实体		Ogre::Plane plane(Ogre::Vector3::UNIT_Y, -10);		Ogre::MeshManager::getSingleton().createPlane("plane", 			ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,			plane,			1500, 1500, 200, 200,			true, 1, 5, 5, Ogre::Vector3::UNIT_Z);		Ogre::Entity* entity = mSceneMgr->createEntity("grasspalne", "plane");		mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entity);		// 设置材质		entity->setMaterialName("Examples/GrassFloor");		// 创建方向光		Ogre::Light* light = mSceneMgr->createLight("light1");		light->setType(Ogre::Light::LT_DIRECTIONAL);		light->setDirection(Ogre::Vector3(1, -1, 0));		// 用manual object 绘制自己定义的物体		Ogre::ManualObject* manual = mSceneMgr->createManualObject("grass");		// param1--渲染manual object用到的材质(纹理)图		// param2--顶点的格式		manual->begin("Examples/GrassBlades", RenderOperation::OT_TRIANGLE_LIST);		// first triangle		manual->position(5.0, 10.0, 0.0);   // indice = 0		manual->textureCoord(1, 0);		manual->position(-5.0, 0.0, 0.0); // indice = 1		manual->textureCoord(0, 1);		manual->position(-5.0, 10.0, 0.0); // indice =2		manual->textureCoord(0, 0);		// second triangle		manual->position(5.0, 0.0, 0.0); //indice = 3		manual->textureCoord(1, 1);		//manual->position(5.0, 10.0, 0.0);		//manual->textureCoord(1, 0);		//manual->position(-5.0, 0.0, 0.0);		//manual->textureCoord(0, 1);		// third triangle		manual->position(2.5, 0.0, 4.3); //indice=4		manual->textureCoord(1, 1);		manual->position(-2.5, 10.0, -4.3); //indice=5		manual->textureCoord(0, 0);		manual->position(-2.5, 0.0, -4.3); //indice=6		manual->textureCoord(0, 1);		// fourth triangle		//manual->position(2.5, 0.0, 4.3);		//manual->textureCoord(1, 1);		manual->position(2.5, 10.0, 4.3);  //indice=7		manual->textureCoord(1, 0);		//manual->position(-2.5, 10.0, -4.3);		//manual->textureCoord(0 ,0);		//fifth triangle		manual->position(2.5, 0.0, -4.3); //indice=8		manual->textureCoord(1 ,1);		manual->position(-2.5, 10.0, 4.3); //indice=9		manual->textureCoord(0, 0);		manual->position(-2.5, 0.0, 4.3); //indice=10		manual->textureCoord(0, 1);		//sixth triangle		//manual->position(2.5, 0.0, -4.3);		//manual->textureCoord(1, 1);		//manual->position(-2.5, 10.0 ,4.3);		//manual->textureCoord(0, 0);		manual->position(2.5, 10.0, -4.3); //indice=11		manual->textureCoord(1, 0);		//using indices		manual->index(0);		manual->index(1);		manual->index(2);		manual->index(0);		manual->index(3);		manual->index(1);		manual->index(4);		manual->index(5);		manual->index(6);		manual->index(4);		manual->index(5);		manual->index(7);		manual->index(8);		manual->index(9);		manual->index(10);		manual->index(8);		manual->index(9);		manual->index(11);		manual->end();		// 对于大量的、静止的模型用StaticGeometry可提高渲染效率		// 只适用于用索引列表表示的模型		// 模型加入StaticGeometry后不能再移动		Ogre::StaticGeometry* field = mSceneMgr->createStaticGeometry("fieldOfGrass");		//Convert this object to a Mesh		manual->convertToMesh("BladeOfGrass");		for (int i=0 ;i<50; ++i)		{			for (int j=0; j<50; ++j)			{				Ogre::Entity* ent = mSceneMgr->createEntity("BladeOfGrass");				field->addEntity(ent, Ogre::Vector3(i * 3, -10, j * 3));			}		}		// 计算加入到field中的所有实体的位置		field->build();	}};int main(){	MyApplication app;	app.go();	return 0;}

  

  

 

你可能感兴趣的文章
2、内核的配置和移植
查看>>
BZOJ2115:[WC2011] Xor(线性基)
查看>>
BZOJ4520:[CQOI2016]K远点对(K-D Tree)
查看>>
Cassandra create a new user
查看>>
LNMP部署(分享十七)
查看>>
HDU 1050 Moving Tables
查看>>
springboot+mybatis+thymeleaf项目搭建及前后端交互
查看>>
使用redis来实现分布式锁
查看>>
ICC_lab总结——ICC_lab2:设计规划
查看>>
ICC_lab总结——ICC_lab6:版图完成
查看>>
实验三
查看>>
Hive的作用
查看>>
sql中的case when
查看>>
struts2重定向
查看>>
开源视频会议bigbluebutton
查看>>
[09]CSS 边框与背景 (上)
查看>>
[SDOI2016]生成魔咒
查看>>
数学分析(Tom M.Apostol) 定理6.7
查看>>
ASPxGridView EditFormLayout修改 TextBox文本长度
查看>>
MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则
查看>>