Ogre切换摄像头

来源:互联网 发布:vb中case是什么意思 编辑:程序博客网 时间:2024/05/16 17:50
Ogre切换摄像头
先看代码
class TutorialApplication : public BaseApplication{public:    TutorialApplication(void);    virtual ~TutorialApplication(void);protected:    virtual void createScene(void);virtual bool frameRenderingQueued(const Ogre::FrameEvent& fe);virtual bool keyPressed(const OIS::KeyEvent& ke);virtual bool keyReleased(const OIS::KeyEvent& ke);virtual bool mouseMoved(const OIS::MouseEvent& me);virtual bool mousePressed(const OIS::MouseEvent& me, OIS::MouseButtonID id);virtual bool mouseReleased(const OIS::MouseEvent& me, OIS::MouseButtonID id);Ogre::Real mRotate;Ogre::Real mMove;Ogre::SceneNode* mCamNode;Ogre::Vector3 mDirection;};

TutorialApplication::TutorialApplication(void):mRotate(.13),mMove(250),mCamNode(0),mDirection(Ogre::Vector3::ZERO){}//---------------------------------------------------------------------------TutorialApplication::~TutorialApplication(void){}//---------------------------------------------------------------------------void TutorialApplication::createScene(void){    // Create your scene here :)mSceneMgr->setAmbientLight(Ogre::ColourValue(.2,.2,.2));Ogre::Entity* tudorEnity = mSceneMgr->createEntity("tudorhouse.mesh");Ogre::SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Node");node->attachObject(tudorEnity);Ogre::Light* light = mSceneMgr->createLight("Light1");light->setType(Ogre::Light::LT_POINT);light->setPosition(Ogre::Vector3(250,150,250));light->setDiffuseColour(Ogre::ColourValue::White);light->setSpecularColour(Ogre::ColourValue::White);node = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode1",Ogre::Vector3(1200,-370,0));node->yaw(Ogre::Degree(90));mCamNode = node;node->attachObject(mCamera);node = mSceneMgr->getRootSceneNode()->createChildSceneNode("CamNode2",Ogre::Vector3(-500,-370,1000));node->yaw(Ogre::Degree(-30));//mCamera->setPosition(0,-370,1000);}bool TutorialApplication::frameRenderingQueued(const Ogre::FrameEvent& fe){bool ret = BaseApplication::frameRenderingQueued(fe);mCamNode->translate(mDirection*fe.timeSinceLastFrame,Ogre::Node::TS_LOCAL);return ret;}bool TutorialApplication::keyPressed(const OIS::KeyEvent& ke) { switch (ke.key){case OIS::KC_ESCAPE:mShutDown = true;break;case OIS::KC_1:mCamera->getParentSceneNode()->detachObject(mCamera);mCamNode = mSceneMgr->getSceneNode("CamNode1");mCamNode->attachObject(mCamera);break;case OIS::KC_2:mCamera->getParentSceneNode()->detachObject(mCamera);mCamNode = mSceneMgr->getSceneNode("CamNode2");mCamNode->attachObject(mCamera);break;case OIS::KC_UP:case OIS::KC_W:mDirection.z = -mMove;break;case OIS::KC_DOWN:case OIS::KC_S:mDirection.z = mMove;break;case OIS::KC_LEFT:case OIS::KC_A:mDirection.x = -mMove;break;case OIS::KC_RIGHT:case OIS::KC_D:mDirection.x = mMove;break;case OIS::KC_PGDOWN:case OIS::KC_E:mDirection.y = -mMove;break;case OIS::KC_PGUP:case OIS::KC_Q:mDirection.y = mMove;break;default:break;}return true; }bool TutorialApplication::keyReleased(const OIS::KeyEvent& ke) { switch (ke.key){case OIS::KC_UP:case OIS::KC_W:mDirection.z = 0;break;case OIS::KC_DOWN:case OIS::KC_S:mDirection.z = 0;break;case OIS::KC_LEFT:case OIS::KC_A:mDirection.x = 0;break;case OIS::KC_RIGHT:case OIS::KC_D:mDirection.x = 0;break;case OIS::KC_PGDOWN:case OIS::KC_E:mDirection.y = 0;break;case OIS::KC_PGUP:case OIS::KC_Q:mDirection.y = 0;break;default:break;}return true; }bool TutorialApplication::mouseMoved(const OIS::MouseEvent& me) { if (me.state.buttonDown(OIS::MB_Right)){mCamNode->yaw(Ogre::Degree(-mRotate * me.state.X.rel), Ogre::Node::TS_WORLD);mCamNode->pitch(Ogre::Degree(-mRotate * me.state.Y.rel), Ogre::Node::TS_LOCAL);}return true; }bool TutorialApplication::mousePressed(const OIS::MouseEvent& me, OIS::MouseButtonID id) { Ogre::Light* light = mSceneMgr->getLight("Light1");switch (id){case OIS::MB_Left:light->setVisible(!light->isVisible());break;default:break;}return true; }bool TutorialApplication::mouseReleased(const OIS::MouseEvent& me, OIS::MouseButtonID id) { return true; }
通过重载虚方法,来获得按钮点击。
通过node->attchobject(mcamera)来切换摄像头位置。

0 0