⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meshviewercnlistener.h

📁 由于Ogre自带的模型观察器无法处理中文名
💻 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 + -