0009Ogre实现起伏定型,云雾效果

来源:互联网 发布:c windows driver sep 编辑:程序博客网 时间:2024/04/29 00:08

在Ogre中共有继承基类ExampleApplication.h可以实现很多应用,比如今天根据教程实现的起伏地形,云和雾灯效果。

#include "ExampleApplication.h"class Example25FrameListener:public Ogre::FrameListener{private:Ogre::SceneNode* _node;public:Example25FrameListener(Ogre::SceneNode* node){_node=node;}bool frameStarted(const Ogre::FrameEvent &evt){_node->translate(Ogre::Vector3(0.1,0,0));     //用(0.1,0,0)来变化节点node以图产生移动(运动)return true;}Ogre::FrameListener* FrameListener;public:Example25FrameListener(){FrameListener=NULL;}~Example25FrameListener(){if(FrameListener){delete FrameListener;}}};class TutorialApplication : public ExampleApplication{private:Ogre::SceneNode* _SinbadNode;protected:void chooseSceneManager(void)      //to choose Scene Manager{mSceneMgr=mRoot->createSceneManager(ST_EXTERIOR_CLOSE);   //choose "ST_EXTERIOR_CLOSE"type Scene ManagerResourceGroupManager::getSingleton().initialiseAllResourceGroups();} void createScene(void){//adding viewport and fog   ,must set before adding a ground ColourValue fadeColour(0.9,0.7,0.9);mWindow->getViewport(0)->setBackgroundColour(fadeColour);        mSceneMgr->setFog(FOG_LINEAR,fadeColour,0.001f,10,500);   //adding a ground/*mSceneMgr->setWorldGeometry("terrain.cfg");*///Create a planeOgre::Plane plane(Vector3::UNIT_Y,-10);Ogre::MeshManager::getSingleton().createPlane("plane",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,plane,1500,1500,200,200,true,1,5,5,Vector3::UNIT_Z);Ogre::Entity* ent=mSceneMgr->createEntity("LightPlaneEntity","plane");mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);ent->setMaterialName("Examples/Rockwall");//adding lightOgre::Light* light=mSceneMgr->createLight("light1");light->setType(Ogre::Light::LT_DIRECTIONAL);light->setDirection(Ogre::Vector3(10,0,-10));//adding entityOgre::SceneNode* node=mSceneMgr->createSceneNode("node1");mSceneMgr->getRootSceneNode()->addChild(node);Ogre::Entity* Sinbad=mSceneMgr->createEntity("Ninja","ninja.mesh");_SinbadNode=node->createChildSceneNode("NinjaNode");_SinbadNode->setScale(0.25f,0.25f,0.25f);_SinbadNode->setPosition(Ogre::Vector3(400.0f,50.0f,400.0f));_SinbadNode->attachObject(Sinbad);_SinbadNode->yaw(Degree(-135));//adding shadowmSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);//adding plane skyPlane plane1;plane1.d=1000;plane1.normal=Vector3::NEGATIVE_UNIT_Y;mSceneMgr->setSkyPlane(false,plane1,"Examples/SpaceSkyPlane",1500,75,true,1.5f,150,150);mSceneMgr->setSkyDome(true,"Examples/CloudySky",5,8,2000,true);  }//adding a camera virtual void createCamera(void){        mCamera=mSceneMgr->createCamera("MyCamera1");mCamera->setPosition(550.0f,120.0f,550.0f);mCamera->lookAt(400.0f,100.0f,400.0f);mCamera->setNearClipDistance(5);}public:TutorialApplication(){}~TutorialApplication(){}};#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32#define WIN32_LEAN_AND_MEAN#include "windows.h"INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine,INT )#elseint main(int argc, char **argv)#endif{// Create application objectTutorialApplication app;try {app.go();} catch( Exception& e ) {#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);#elsefprintf(stderr, "An exception has occured: %s\n",e.getFullDescription().c_str());#endif}return 0;}


 

0 0
原创粉丝点击