Ogre练习

来源:互联网 发布:淘宝店如何关闭 编辑:程序博客网 时间:2024/05/21 04:22
#include "OGRE\ExampleApplication.h"class MyExample : public ExampleApplication{public:class MyFrameListener : public Ogre::FrameListener{public:MyFrameListener(MyExample* app){_app = app;size_t windowHnd = 0;std::stringstream windowHndStr;OIS::ParamList pl;_app->mWindow->getCustomAttribute("WINDOW",&windowHnd);windowHndStr<<windowHnd;pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));_inputsys = OIS::InputManager::createInputSystem(pl);_key = static_cast<OIS::Keyboard*>(_inputsys->createInputObject(OIS::OISKeyboard,false));}~MyFrameListener(){_inputsys->destroyInputObject(_key);OIS::InputManager::destroyInputSystem(_inputsys);}bool frameStarted(const Ogre::FrameEvent &evt){_app->_sinbadNode->translate(Ogre::Vector3(0.1,0,0));_app->mCamera->lookAt(_app->_sinbadNode->getPosition());if(_app->_sinbadAniState) _app->_sinbadAniState->addTime(evt.timeSinceLastFrame);_key->capture();if(_key->isKeyDown(OIS::KC_ESCAPE)){return false;}else if(_key->isKeyDown(OIS::KC_W)){_app->mCamera->moveRelative(Ogre::Vector3(0,0,-0.5));}else if(_key->isKeyDown(OIS::KC_S)){_app->mCamera->moveRelative(Ogre::Vector3(0,0,0.5));}else if(_key->isKeyDown(OIS::KC_A)){_app->mCamera->moveRelative(Ogre::Vector3(-0.5,0,0));}else if(_key->isKeyDown(OIS::KC_D)){_app->mCamera->moveRelative(Ogre::Vector3(0.5,0,0));}else if(_key->isKeyDown(OIS::KC_R)){_app->_sinbadAniState = _app->_sinbadEnt->getAnimationState("Dance");_app->_sinbadAniState->setEnabled(true);_app->_sinbadAniState->setLoop(true);}return true;}private:MyExample* _app;OIS::InputManager* _inputsys;OIS::Keyboard* _key;};MyExample(){_frameListener = NULL;_sinbadAniState = NULL;}~MyExample(){if(_frameListener) delete _frameListener;}bool configure(void){if(mRoot->restoreConfig()){mWindow = mRoot->initialise(true);return true;}else{return false;}}void createFrameListener(void){_frameListener = new MyFrameListener(this);mRoot->addFrameListener(_frameListener);}void createCamera(void){mCamera = mSceneMgr->createCamera("MyCamera1");mCamera->setPosition(0,10,500);mCamera->lookAt(0,0,0);mCamera->setNearClipDistance(5);}void createScene(){_sinbadEnt = mSceneMgr->createEntity("MyEntity","Sinbad.mesh");_sinbadNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node1",Ogre::Vector3(0,5,300));_sinbadNode->attachObject(_sinbadEnt);_sinbadNode->setScale(3.0,3.0,3.0);Ogre::Plane plane(Vector3::UNIT_Y,-10);Ogre::MeshManager::getSingleton().createPlane("plane",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,1500,1500,50,50,true,1,10,10,Vector3::UNIT_Z);Ogre::Entity* entPlane = mSceneMgr->createEntity("LightPlaneEntity", "plane");mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(entPlane);entPlane->setMaterialName("Examples/BeachStones");Ogre::Light* pointLight = mSceneMgr->createLight("PointLight");pointLight->setType(Ogre::Light::LT_POINT);pointLight->setPosition(0,200,0);pointLight->setDiffuseColour(1.0f,1.0f,1.0f);mSceneMgr->setShadowTechnique(Ogre:: SHADOWTYPE_STENCIL_ADDITIVE);}private:Ogre::Entity* _sinbadEnt;Ogre::SceneNode* _sinbadNode;Ogre::AnimationState* _sinbadAniState;Ogre::FrameListener* _frameListener;};INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmdLine, INT){MyExample app;app.go();return 0;}

0 0
原创粉丝点击