Ogre 2011-11-30
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Ogre 2011-11-30
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                自己創建scene manager,載入bsp地圖
class MyApplication :public ExampleApplication { public:MyApplication() {}~MyApplication(){}void createScene(){std::cout<<mSceneMgr->getTypeName()<<"::"<<mSceneMgr->getName()<<std::endl;}virtual void chooseSceneManager(){ResourceGroupManager::getSingleton().addResourceLocation("http://www.cnblogs.com/media/packs/chiropteraDM.pk3","Zip", ResourceGroupManager::getSingleton().getWorldResourceGroupName(), true);// index all files in the resource group which are not already indexed, of course we // should give the name of the resource group we want to index.ResourceGroupManager::getSingleton().initialiseResourceGroup(ResourceGroupManager::getSingleton().getWorldResourceGroupName());// create a bsp scene manager// BspSceneManager : identifying a unique SceneManager typemSceneMgr = mRoot->createSceneManager("BspSceneManager");// tell the bsp scene manager to load a map saved in the bsp file formatmSceneMgr->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 trianglemanual->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 trianglemanual->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 trianglemanual->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 trianglemanual->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 trianglemanual->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 trianglemanual->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 trianglemanual->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 ExampleApplication2 {
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<<i<<j;
91 Ogre::Entity* ent = mSceneMgr->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 trianglemanual->position(5.0, 10.0, 0.0); // indice = 0manual->textureCoord(1, 0);manual->position(-5.0, 0.0, 0.0); // indice = 1manual->textureCoord(0, 1);manual->position(-5.0, 10.0, 0.0); // indice =2manual->textureCoord(0, 0);// second trianglemanual->position(5.0, 0.0, 0.0); //indice = 3manual->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 trianglemanual->position(2.5, 0.0, 4.3); //indice=4manual->textureCoord(1, 1);manual->position(-2.5, 10.0, -4.3); //indice=5manual->textureCoord(0, 0);manual->position(-2.5, 0.0, -4.3); //indice=6manual->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=7manual->textureCoord(1, 0);//manual->position(-2.5, 10.0, -4.3);//manual->textureCoord(0 ,0);//fifth trianglemanual->position(2.5, 0.0, -4.3); //indice=8manual->textureCoord(1 ,1);manual->position(-2.5, 10.0, 4.3); //indice=9manual->textureCoord(0, 0);manual->position(-2.5, 0.0, 4.3); //indice=10manual->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=11manual->textureCoord(1, 0);//using indicesmanual->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 Meshmanual->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; }
?
總結
以上是生活随笔為你收集整理的Ogre 2011-11-30的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: boost::regex
 - 下一篇: 2018年中国银行业十件大事,“Fint