📄 meshviewercnlistener.h
字号:
/*天龙八部模型查看工具作者:shangguanw2E-mail: songnianhu@163.comQQ:329967612 2009-1-5 代码可以随意使用,Enjoy! */#ifndef _MESHVIEWERCN_LISTENER_H_#define _MESHVIEWERCN_LISTENER_H_#include <ExampleApplication.h>//头文件包含CEGUI#include <CEGUI/CEGUIImageset.h>#include <CEGUI/CEGUISystem.h>#include <CEGUI/CEGUILogger.h>#include <CEGUI/CEGUISchemeManager.h>#include <CEGUI/CEGUIWindowManager.h>#include <CEGUI/CEGUIWindow.h>#include <CEGUI/CEGUIPropertyHelper.h>#include <CEGUI/elements/CEGUICombobox.h>#include <CEGUI/elements/CEGUIListbox.h>#include <CEGUI/elements/CEGUIListboxTextItem.h>#include <CEGUI/elements/CEGUIPushButton.h>#include <CEGUI/elements/CEGUIScrollbar.h>#include <OgreCEGUIRenderer.h>#include <OgreCEGUIResourceProvider.h>//传递给FrameListener的自定义参数typedef struct _CUSTOM_PARAM{ Ogre::AnimationState* animState; bool stateEnabled; //动画状态是否有效 Ogre::SceneNode* node; //mesh的场景节点}CUSTOM_PARAM;//用于在OIS和CEGUI之间转换鼠标CEGUI::MouseButton convertOISMouseButtonToCegui(int buttonID){ switch (buttonID) { case 0: return CEGUI::LeftButton; case 1: return CEGUI::RightButton; case 2: return CEGUI::MiddleButton; case 3: return CEGUI::X1Button; default: return CEGUI::LeftButton; }}class MeshViewerCnListener : public ExampleFrameListener,public OIS::KeyListener,public OIS::MouseListener{private: CEGUI::Renderer* mGUIRenderer; bool mShutdownRequested; CUSTOM_PARAM* mParam;public: MeshViewerCnListener(RenderWindow* win, Camera* cam, CEGUI::Renderer* renderer,CUSTOM_PARAM* param) : ExampleFrameListener(win, cam, true, true, true), mGUIRenderer(renderer), mShutdownRequested(false), mParam(param) { mMouse->setEventCallback(this); mKeyboard->setEventCallback(this); } /// Tell the frame listener to exit at the end of the next frame void requestShutdown(void) { mShutdownRequested = true; } bool frameStarted(const FrameEvent& evt) { if(!ExampleFrameListener::frameStarted(evt)) return false; if(mParam->animState!=NULL&& mParam->stateEnabled==true) mParam->animState->addTime(evt.timeSinceLastFrame); const OIS::MouseState& ms = mMouse->getMouseState(); if(ms.buttonDown(OIS::MB_Left)){ //如果左键按下 Ogre::Radian x = Ogre::Degree(ms.X.rel*0.13); Ogre::Radian y = Ogre::Degree(ms.Y.rel*0.13); if(mParam->node!=NULL){ mParam->node->yaw(x); mParam->node->pitch(y); } } if(ms.buttonDown(OIS::MB_Right)){ Ogre::Vector3 trans; trans.x=-ms.X.rel*0.13; trans.y=-ms.Y.rel*0.13; mParam->node->translate(trans); } return true; } bool frameEnded(const FrameEvent& evt) { if (mShutdownRequested) return false; else return ExampleFrameListener::frameEnded(evt); } bool mouseMoved( const OIS::MouseEvent &arg ) { CEGUI::System::getSingleton().injectMouseMove( arg.state.X.rel, arg.state.Y.rel ); return true; } //----------------------------------------------------------------// bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id ) { CEGUI::System::getSingleton().injectMouseButtonDown(convertOISMouseButtonToCegui(id)); return true; } //----------------------------------------------------------------// bool mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id ) { CEGUI::System::getSingleton().injectMouseButtonUp(convertOISMouseButtonToCegui(id)); return true; } //----------------------------------------------------------------// bool keyPressed( const OIS::KeyEvent &arg ) { if( arg.key == OIS::KC_ESCAPE ) mShutdownRequested = true; CEGUI::System::getSingleton().injectKeyDown( arg.key ); CEGUI::System::getSingleton().injectChar( arg.text ); return true; } //----------------------------------------------------------------// bool keyReleased( const OIS::KeyEvent &arg ) { CEGUI::System::getSingleton().injectKeyUp( arg.key ); return true; }};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -