CEGUI完全使用手册.docx
《CEGUI完全使用手册.docx》由会员分享,可在线阅读,更多相关《CEGUI完全使用手册.docx(73页珍藏版)》请在冰点文库上搜索。
![CEGUI完全使用手册.docx](https://file1.bingdoc.com/fileroot1/2023-5/27/1dde08b1-24ea-4011-9da2-cb06966d2a1a/1dde08b1-24ea-4011-9da2-cb06966d2a1a1.gif)
CEGUI完全使用手册
使用CEGUI步骤:
初始化CEGUI(Renderer,system)
加载文件(scheme,font,mousecursor)
创建CEGUI窗口
注入输入事件,添加事件处理函数
渲染CEGUI(ogre自动渲染)
程序框架:
CEGUIBaseApp.h:
初始化CEGUI
CEGUIDemo.h:
创建CEGUI窗口
CEGUIFrameListener.h:
监听器
CEGUImain.cpp:
创建要显示的窗口
/***********************************************************
CEGUIBaseApp.h
葛娟
************************************************************/
#ifndef_CEGUIBaseApp_h_
#define_CEGUIBaseApp_h_
///包含头文件
#include
#include
#include
#include"CEGUIFrameListener.h"
#include"CEGUIDemo.h"
///前向声明
classCEGUIDemo;
classCEGUIFrameListener;
classCEGUIBaseApp
{
public:
CEGUIBaseApp();
virtual~CEGUIBaseApp();
//初始化实例并进行渲染
virtualboolexecute(CEGUIDemo*sampleApp);
virtualvoidcleanup();
virtualvoidsetQuitting(boolquit=true){d_quitting=quit;}
virtualboolisQuitting()const{returnd_quitting;}
protected:
boold_quitting;//程序是否退出
boold_initialised;//是否已经初始化
Ogre:
:
Root*d_ogreRoot;
Ogre:
:
Camera*d_camera;
Ogre:
:
RenderWindow*d_window;
CEGUI:
:
OgreCEGUIRenderer*d_renderer;
CEGUIFrameListener*d_frameListener;
/*------------------------------------------------------------------
增加资源组及路径
--------------------------------------------------------------------*/
voidinitialiseResources(void);
};
#endif//endofguard_CEGUIBaseApp_h_
/***********************************************************
CEGUIBaseApp.cpp
葛娟
************************************************************/
#include"CEGUIBaseApp.h"
//---------------------------------------------------------------------------------------------------------------
voidCEGUIBaseApp:
:
initialiseResources(void)
{
usingnamespaceOgre;
ResourceGroupManager&rgm=ResourceGroupManager:
:
getSingleton();
//创建资源组
rgm.createResourceGroup("imagesets");
rgm.createResourceGroup("fonts");
rgm.createResourceGroup("layouts");
rgm.createResourceGroup("schemes");
rgm.createResourceGroup("looknfeels");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/fonts","FileSystem","fonts");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/imagesets","FileSystem","imagesets");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/layouts","FileSystem","layouts");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/looknfeel","FileSystem","looknfeels");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/schemes","FileSystem","schemes");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/configs","FileSystem");
ResourceGroupManager:
:
getSingleton().addResourceLocation("ceguifiles/lua_scripts","FileSystem");
}
//--------------------------------------------------------------------------------------------------------------------------
CEGUIBaseApp:
:
CEGUIBaseApp():
d_quitting(false),
d_ogreRoot(0),
d_renderer(0),
d_initialised(false),
d_frameListener(0)
{
usingnamespaceOgre;
d_ogreRoot=newRoot();//创建根
initialiseResources();
if(d_ogreRoot->showConfigDialog())
{
d_window=d_ogreRoot->initialise(true,"GeJuan");//初始化渲染系统,返回自动创建的窗口
SceneManager*sm=d_ogreRoot->createSceneManager(ST_GENERIC,"SampleSceneMgr");//创建场景管理器
d_camera=sm->createCamera("SampleCam");//创建摄像机
d_camera->setPosition(Vector3(0,0,500));
d_camera->lookAt(Vector3(0,0,-300));
d_camera->setNearClipDistance(5);
Viewport*vp=d_window->addViewport(d_camera);//创建占据整个窗口的视口
vp->setBackgroundColour(ColourValue(0,0,0));
d_camera->setAspectRatio(Real(vp->getActualWidth())/Real(vp->getActualHeight()));
ResourceGroupManager:
:
getSingleton().initialiseAllResourceGroups();//初始化资源组
//CEGUI的初始化///////////////////////////////////////////////////////////////////////////////////
d_renderer=newCEGUI:
:
OgreCEGUIRenderer(d_window,RENDER_QUEUE_OVERLAY,false,0,sm);//初始化GUI
newCEGUI:
:
System(d_renderer);
CEGUI:
:
Imageset:
:
setDefaultResourceGroup("imagesets");
CEGUI:
:
Font:
:
setDefaultResourceGroup("fonts");
CEGUI:
:
Scheme:
:
setDefaultResourceGroup("schemes");
CEGUI:
:
WidgetLookManager:
:
setDefaultResourceGroup("looknfeels");
CEGUI:
:
WindowManager:
:
setDefaultResourceGroup("layouts");
CEGUI:
:
ScriptModule:
:
setDefaultResourceGroup("lua_scripts");
//创建帧监听器
d_frameListener=newCEGUIFrameListener(this,d_window,d_camera);
d_ogreRoot->addFrameListener(d_frameListener);
d_initialised=true;
}
else
{
deleted_ogreRoot;
d_ogreRoot=0;
}
}
//--------------------------------------------------------------------------------------------------------
CEGUIBaseApp:
:
~CEGUIBaseApp()
{
deleted_frameListener;
deleteCEGUI:
:
System:
:
getSingletonPtr();
deleted_renderer;
deleted_ogreRoot;
}
//--------------------------------------------------------------------------------------------------------------
boolCEGUIBaseApp:
:
execute(CEGUIDemo*sampleApp)
{
if(d_ogreRoot&&d_initialised)
{
sampleApp->initialiseSample();
//通过Ogre3D渲染
try
{
d_ogreRoot->startRendering();
}
catch(Ogre:
:
Exception&)
{
returnfalse;
}
catch(CEGUI:
:
Exception&)
{
returnfalse;
}
returntrue;
}
else
{
returnfalse;
}
}
//-----------------------------------------------------------------------------------------------------
voidCEGUIBaseApp:
:
cleanup()
{
}
/***********************************************************
CEGUIFrameListener.h
葛娟
************************************************************/
#ifndef_CEGUIFrameListener_h_
#define_CEGUIFrameListener_h_
#include
#include
#include"CEGUIBaseApp.h"
classCEGUIBaseApp;
classCEGUIFrameListener:
publicOgre:
:
FrameListener,publicOgre:
:
WindowEventListener,publicOIS:
:
MouseListener,publicOIS:
:
KeyListener
{
public:
CEGUIFrameListener(CEGUIBaseApp*baseApp,Ogre:
:
RenderWindow*win,Ogre:
:
Camera*cam,booluseBufferedInputKeys=true,booluseBufferedInputMouse=true);
~CEGUIFrameListener();
boolframeStarted(constOgre:
:
FrameEvent&evt);
boolframeEnded(constOgre:
:
FrameEvent&evt);
virtualvoidwindowResized(Ogre:
:
RenderWindow*rw);
virtualvoidwindowClosed(Ogre:
:
RenderWindow*rw);
boolmouseMoved(constOIS:
:
MouseEvent&arg);
boolmousePressed(constOIS:
:
MouseEvent&arg,OIS:
:
MouseButtonIDid);
boolmouseReleased(constOIS:
:
MouseEvent&arg,OIS:
:
MouseButtonIDid);
boolkeyPressed(constOIS:
:
KeyEvent&arg);
boolkeyReleased(constOIS:
:
KeyEvent&arg);
protected:
boold_quit;
Ogre:
:
Overlay*d_statsOverlay;
Ogre:
:
Camera*d_camera;
Ogre:
:
RenderWindow*d_window;
CEGUIBaseApp*d_baseApp;
OIS:
:
InputManager*mInputManager;
OIS:
:
Mouse*mMouse;
OIS:
:
Keyboard*mKeyboard;
CEGUI:
:
MouseButtonconvertButton(OIS:
:
MouseButtonIDbuttonID);
};
#endif//endofguard_CEGUIFrameListener_h_
/***********************************************************
CEGUIFrameListener.cpp
葛娟
************************************************************/
#include"CEGUIFrameListener.h"
//---------------------------------------------------------------------------------------------
CEGUIFrameListener:
:
CEGUIFrameListener(CEGUIBaseApp*baseApp,Ogre:
:
RenderWindow*win,Ogre:
:
Camera*cam,booluseBufferedInputKeys,booluseBufferedInputMouse):
d_baseApp(baseApp),
d_window(win),
d_camera(cam),
d_quit(false)
{
usingnamespaceOIS;
d_statsOverlay=Ogre:
:
OverlayManager:
:
getSingleton().getByName("gj/gjdefine");
if(d_statsOverlay)
d_statsOverlay->show();
ParamListpl;
size_twindowHnd=0;
std:
:
ostringstreamwindowHndStr;
win->getCustomAttribute("WINDOW",&windowHnd);
windowHndStr<pl.insert(std:
:
make_pair(std:
:
string("WINDOW"),windowHndStr.str()));
pl.insert(std:
:
make_pair(std:
:
string("w32_mouse"),std:
:
string("DISCL_FOREGROUND")));
pl.insert(std:
:
make_pair(std:
:
string("w32_mouse"),std:
:
string("DISCL_NONEXCLUSIVE")));
mInputManager=InputManager:
:
createInputSystem(pl);
mKeyboard=static_cast(mInputManager->createInputObject(OISKeyboard,useBufferedInputKeys));
mMouse=static_cast(mInputManager->createInputObject(OISMouse,useBufferedInputMouse));
windowResized(d_window);
Ogre:
:
WindowEventUtilities:
:
addWindowEventListener(d_window,this);
mMouse->setEventCallback(this);
mKeyboard->setEventCallback(this);
}
voidCEGUIFrameListener:
:
windowResized(Ogre:
:
RenderWindow*rw)
{
unsignedintwidth,height,depth;
intleft,top;
rw->getMetrics(width,height,depth,left,top);
constOIS:
:
MouseState&ms=mMouse->getMouseState();
ms.width=width;
ms.height=height;
}
//---------------------------------------------------------------------------------------------
CEGUIFrameListener:
:
~CEGUIFrameListener()
{
Ogre:
:
WindowEventUtilities:
:
removeWindowEventListener(d_window,this);
windowClosed(d_window);
}
voidCEGUIFrameListener:
:
windowClosed(Ogre:
:
RenderWindow*rw)
{
if(rw==d_window)
{
if(mInputManager)
{
mInputManager->destroyInputObject(mMouse);
mInputManager->destroyInputObject(mKeyboard);
OIS:
:
InputManager:
:
destroyInputSystem(mInputManager);
mInputManager=0;
}
}
}
//----------------------------------------------------------------------------------
boolCEGUIFrameListener:
:
frameStarted(constOgre:
:
FrameEvent&evt)
{
usingnamespaceOIS;
d_quit=d_baseApp->isQuitting();
mKeyboard->capture();
mMouse->capture();
//没有处理立即模式的输入
return(!
d_quit&&!
mKeyboard->isKeyDown(OIS:
:
KC_ESCAPE)&&!
d_window->isClosed());
}
//-------------------------------------------------------------------------------
boolCEGUIFrameListener:
:
frameEnded(constOgre:
:
FrameEvent&evt)
{
//可以在这里更新状态
returntrue;
}
//---------------------------------------