CEGUI完全使用手册_第1页
CEGUI完全使用手册_第2页
CEGUI完全使用手册_第3页
CEGUI完全使用手册_第4页
CEGUI完全使用手册_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用CEGUI步骤:初始化CEGUI(Renderer,system)加载文件(scheme,font,mousecursor)创建CEGUI窗口注入输入事件,添加事件处理函数渲染CEGUI(ogre自动渲染)程序框架:CEGUIBaseApp.h: 初始化CEGUICEGUIDemo.h: 创建CEGUI窗口CEGUIFrameListener.h: 监听器CEGUImain.cpp: 创建要显示的窗口/* CEGUIBaseApp.h 葛娟<gejuan>*/#ifndef _CEGUIBaseApp_h_#define _CEGUIBaseApp_h_/包含头文件#inclu

2、de <CEGUI/CEGUI.h>#include <OgreCEGUIRenderer.h>#include <Ogre.h>#include "CEGUIFrameListener.h"#include "CEGUIDemo.h "/前向声明class CEGUIDemo;class CEGUIFrameListener;class CEGUIBaseApppublic:CEGUIBaseApp();virtual CEGUIBaseApp();/初始化实例并进行渲染virtual bool execute(CE

3、GUIDemo* sampleApp);virtual void cleanup();virtual void setQuitting(bool quit = true) d_quitting = quit; virtual bool isQuitting() const return d_quitting; protected:bool d_quitting; /程序是否退出bool d_initialised; /是否已经初始化Ogre:Root* d_ogreRoot;Ogre:Camera* d_camera;Ogre:RenderWindow* d_window;CEGUI:Ogre

4、CEGUIRenderer* d_renderer;CEGUIFrameListener* d_frameListener;/*- 增加资源组及路径-*/void initialiseResources(void);#endif /end of guard _CEGUIBaseApp_h_/* CEGUIBaseApp.cpp 葛娟<gejuan>*/#include "CEGUIBaseApp.h"/-void CEGUIBaseApp:initialiseResources(void)using namespace Ogre;ResourceGroupMan

5、ager& rgm = ResourceGroupManager:getSingleton();/ 创建资源组rgm.createResourceGroup("imagesets");rgm.createResourceGroup("fonts");rgm.createResourceGroup("layouts");rgm.createResourceGroup("schemes");rgm.createResourceGroup("looknfeels");ResourceGroup

6、Manager:getSingleton().addResourceLocation("ceguifiles/fonts", "FileSystem", "fonts");ResourceGroupManager:getSingleton().addResourceLocation("ceguifiles/imagesets", "FileSystem", "imagesets");ResourceGroupManager:getSingleton().addResource

7、Location("ceguifiles/layouts", "FileSystem", "layouts");ResourceGroupManager:getSingleton().addResourceLocation("ceguifiles/looknfeel", "FileSystem", "looknfeels");ResourceGroupManager:getSingleton().addResourceLocation("ceguifiles/sch

8、emes", "FileSystem", "schemes");ResourceGroupManager:getSingleton().addResourceLocation("ceguifiles/configs", "FileSystem");ResourceGroupManager:getSingleton().addResourceLocation("ceguifiles/lua_scripts", "FileSystem");/-CEGUIBaseApp:

9、CEGUIBaseApp(): d_quitting(false), d_ogreRoot(0), d_renderer(0), d_initialised(false), d_frameListener(0)using namespace Ogre;d_ogreRoot = new Root();/创建根initialiseResources();if (d_ogreRoot->showConfigDialog()d_window = d_ogreRoot->initialise(true,"GeJuan");/ 初始化渲染系统,返回自动创建的窗口SceneM

10、anager* 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->

11、;addViewport(d_camera);/ 创建占据整个窗口的视口vp->setBackgroundColour(ColourValue(0,0,0);d_camera->setAspectRatio(Real(vp->getActualWidth() / Real(vp->getActualHeight();ResourceGroupManager:getSingleton().initialiseAllResourceGroups();/ 初始化资源组/CEGUI的初始化/d_renderer = new CEGUI:OgreCEGUIRenderer(d_w

12、indow, RENDER_QUEUE_OVERLAY, false, 0, sm);/ 初始化new CEGUI:System(d_renderer);CEGUI:Imageset:setDefaultResourceGroup("imagesets");CEGUI:Font:setDefaultResourceGroup("fonts");CEGUI:Scheme:setDefaultResourceGroup("schemes");CEGUI:WidgetLookManager:setDefaultResourceGroup(&

13、quot;looknfeels");CEGUI:WindowManager:setDefaultResourceGroup("layouts");CEGUI:ScriptModule:setDefaultResourceGroup("lua_scripts");/ 创建帧监听器d_frameListener= new CEGUIFrameListener(this, d_window, d_camera);d_ogreRoot->addFrameListener(d_frameListener);d_initialised = true;

14、elsedelete d_ogreRoot;d_ogreRoot = 0;/-CEGUIBaseApp:CEGUIBaseApp()delete d_frameListener;delete CEGUI:System:getSingletonPtr();delete d_renderer;delete d_ogreRoot;/-bool CEGUIBaseApp:execute(CEGUIDemo* sampleApp)if (d_ogreRoot && d_initialised)sampleApp->initialiseSample();/ 通过Ogre3D 渲染tr

15、yd_ogreRoot->startRendering();catch(Ogre:Exception&)return false;catch(CEGUI:Exception&)return false;return true;elsereturn false;/-void CEGUIBaseApp:cleanup()/*CEGUIFrameListener.h 葛娟<gejuan>*/#ifndef _CEGUIFrameListener_h_#define _CEGUIFrameListener_h_#include <OIS/OIS.h>#in

16、clude <CEGUI/CEGUI.h>#include "CEGUIBaseApp.h"class CEGUIBaseApp;class CEGUIFrameListener: public Ogre:FrameListener, public Ogre:WindowEventListener, public OIS:MouseListener, public OIS:KeyListenerpublic:CEGUIFrameListener(CEGUIBaseApp* baseApp, Ogre:RenderWindow* win, Ogre:Camera*

17、 cam, bool useBufferedInputKeys = true, bool useBufferedInputMouse = true);CEGUIFrameListener();bool frameStarted(const Ogre:FrameEvent& evt);bool frameEnded(const Ogre:FrameEvent& evt);virtual void windowResized(Ogre:RenderWindow* rw);virtual void windowClosed(Ogre:RenderWindow* rw);bool mo

18、useMoved(const OIS:MouseEvent &arg);bool mousePressed(const OIS:MouseEvent &arg, OIS:MouseButtonID id);bool mouseReleased(const OIS:MouseEvent &arg, OIS:MouseButtonID id);bool keyPressed(const OIS:KeyEvent &arg);bool keyReleased(const OIS:KeyEvent &arg);protected:bool d_quit;Ogre

19、:Overlay* d_statsOverlay;Ogre:Camera* d_camera;Ogre:RenderWindow* d_window;CEGUIBaseApp* d_baseApp;OIS:InputManager* mInputManager;OIS:Mouse* mMouse;OIS:Keyboard* mKeyboard;CEGUI:MouseButton convertButton(OIS:MouseButtonID buttonID);#endif /end of guard _CEGUIFrameListener_h_/*CEGUIFrameListener.cpp

20、 葛娟<gejuan>*/#include "CEGUIFrameListener.h"/-CEGUIFrameListener:CEGUIFrameListener(CEGUIBaseApp* baseApp, Ogre:RenderWindow* win, Ogre:Camera* cam, bool useBufferedInputKeys, bool useBufferedInputMouse): d_baseApp(baseApp), d_window(win), d_camera(cam), d_quit(false)using namespace

21、OIS;d_statsOverlay = Ogre:OverlayManager:getSingleton().getByName("gj/gjdefine");if(d_statsOverlay)d_statsOverlay->show();ParamList pl;size_t windowHnd = 0;std:ostringstream windowHndStr;win->getCustomAttribute("WINDOW", &windowHnd);windowHndStr << windowHnd;pl.in

22、sert(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 = InputManage

23、r:createInputSystem( pl );mKeyboard = static_cast<Keyboard*>(mInputManager->createInputObject( OISKeyboard,useBufferedInputKeys );mMouse = static_cast<Mouse*>(mInputManager->createInputObject( OISMouse,useBufferedInputMouse );windowResized(d_window);Ogre:WindowEventUtilities:addWin

24、dowEventListener(d_window, this);mMouse->setEventCallback(this);mKeyboard->setEventCallback(this);void CEGUIFrameListener:windowResized(Ogre:RenderWindow* rw)unsigned int width, height, depth;int left, top;rw->getMetrics(width, height, depth, left, top);const OIS:MouseState &ms = mMouse

25、->getMouseState();ms.width = width;ms.height = height;/-CEGUIFrameListener:CEGUIFrameListener()Ogre:WindowEventUtilities:removeWindowEventListener(d_window, this);windowClosed(d_window);void CEGUIFrameListener:windowClosed(Ogre:RenderWindow* rw)if( rw = d_window )if( mInputManager )mInputManager-

26、>destroyInputObject( mMouse );mInputManager->destroyInputObject( mKeyboard );OIS:InputManager:destroyInputSystem(mInputManager);mInputManager = 0;/-bool CEGUIFrameListener:frameStarted(const Ogre:FrameEvent& evt)using namespace OIS;d_quit = d_baseApp->isQuitting();mKeyboard->capture(

27、);mMouse->capture();/没有处理立即模式的输入return(!d_quit&& !mKeyboard->isKeyDown(OIS:KC_ESCAPE)&&!d_window->isClosed();/-bool CEGUIFrameListener:frameEnded(const Ogre:FrameEvent& evt)/可以在这里更新状态return true;/-CEGUI:MouseButton CEGUIFrameListener:convertButton(OIS:MouseButtonID butto

28、nID)switch(buttonID)case OIS:MB_Left:return CEGUI:LeftButton;case OIS:MB_Right:return CEGUI:RightButton;case OIS:MB_Middle:return CEGUI:MiddleButton;default:return CEGUI:LeftButton;/- bool CEGUIFrameListener:mouseMoved(const OIS:MouseEvent &arg) CEGUI:System:getSingleton().injectMouseMove(arg.st

29、ate.X.rel,arg.state.Y.rel); return true; bool CEGUIFrameListener:mousePressed(const OIS:MouseEvent &arg, OIS:MouseButtonID id) CEGUI:System:getSingleton().injectMouseButtonDown(convertButton(id); return true; bool CEGUIFrameListener:mouseReleased(const OIS:MouseEvent &arg, OIS:MouseButtonID

30、id) CEGUI:System:getSingleton().injectMouseButtonUp(convertButton(id); return true; bool CEGUIFrameListener:keyPressed(const OIS:KeyEvent &arg)CEGUI:System *sys = CEGUI:System:getSingletonPtr();sys->injectKeyDown(arg.key);sys->injectChar(arg.text);return true;bool CEGUIFrameListener:keyRel

31、eased(const OIS:KeyEvent &arg)CEGUI:System:getSingletonPtr()->injectKeyUp(arg.key);return true;/* CEGUIDemo.h 葛娟<gejuan>*/#ifndef _CEGUIDemo_h_#define _CEGUIDemo_h_#include "CEGUIBaseApp.h"/前向声明class CEGUIBaseApp;class CEGUIFrameListener;class CEGUIDemopublic:CEGUIDemo(): d_sa

32、mpleApp(0) CEGUIDemo();bool run();/初始化实例virtual bool initialiseSample()=0;virtual void cleanupSample()=0;protected:CEGUIBaseApp* d_sampleApp;virtual void cleanup();#endif/* CEGUIDemo.cpp 葛娟<gejuan>*/#include "CEGUIDemo.h "/-CEGUIDemo:CEGUIDemo()if (d_sampleApp)d_sampleApp->cleanup

33、();delete d_sampleApp;/-bool CEGUIDemo:run()d_sampleApp=new CEGUIBaseApp;if (d_sampleApp->execute(this)cleanup();return true;delete d_sampleApp;d_sampleApp = 0;return false;/- void CEGUIDemo:cleanup() if (d_sampleApp) d_sampleApp->cleanup(); delete d_sampleApp; d_sampleApp = 0; #include "

34、CEGUIDemo.h "class CEGUIDemoApp:public CEGUIDemopublic:bool initialiseSample()return true;void cleanupSample();int main(int argc, char *argv)CEGUIDemoApp app;return app.run();Demo1:只定义了windowtype的scheme文件#include "CEGUIDemo.h "class CEGUIDemoApp:public CEGUIDemopublic:bool initialiseS

35、ample()using namespace CEGUI;/图像集Imageset* taharezImages = ImagesetManager:getSingleton().createImageset("TaharezLook.imageset");/鼠标System:getSingleton().setDefaultMouseCursor(&taharezImages->getImage("MouseArrow");/字体FontManager:getSingleton().createFont("Commonwealt

36、h-10.font");/looknfeelWidgetLookManager:getSingleton().parseLookNFeelSpecification("TaharezLook.looknfeel");/schemeSchemeManager:getSingleton().loadScheme("TaharezLookWidgets.scheme");/加载只包含widget的schemeWindowManager& winMgr = WindowManager:getSingleton();DefaultWindow*

37、root = (DefaultWindow*)winMgr.createWindow("DefaultWindow", "Root");/创建GUI表单窗口System:getSingleton().setGUISheet(root);FrameWindow* wnd = (FrameWindow*)winMgr.createWindow("TaharezLook/FrameWindow", "Demo Window");/创建GUI框架窗口, 类型是cheme中定义的root->addChildWindow

38、(wnd);wnd->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.25f);wnd->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.5f);wnd->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f);wnd->setMinSize(UVector2(cegui_reldim(0.1f), cegui_reldim( 0.1f);wnd->setText("

39、Hello World!");return true;void cleanupSample();int main(int argc, char *argv)CEGUIDemoApp app;return app.run();Demo2:定义了图像集的scheme文件#include "CEGUIDemo.h "bool sliderHandler(const CEGUI:EventArgs& e)using namespace CEGUI;Slider* s = static_cast<Slider*>(static_cast<const

40、 WindowEventArgs&>(e).window);float val = s->getCurrentValue();/获得alpha值WindowManager:getSingleton().getWindow("root_wnd")->setAlpha(val);return true;bool formatChangedHandler(const CEGUI:EventArgs& e)using namespace CEGUI;WindowManager& winMgr = WindowManager:getSingl

41、eton();const RadioButton* rb1 = static_cast<const RadioButton*>(winMgr.getWindow("TextWindow/RB1");const RadioButton* rb2 = static_cast<const RadioButton*>(winMgr.getWindow("TextWindow/RB2");const RadioButton* rb3 = static_cast<const RadioButton*>(winMgr.getWind

42、ow("TextWindow/RB3");const RadioButton* rb4 = static_cast<const RadioButton*>(winMgr.getWindow("TextWindow/RB4");const RadioButton* rb5 = static_cast<const RadioButton*>(winMgr.getWindow("TextWindow/RB5");const RadioButton* rb6 = static_cast<const RadioBu

43、tton*>(winMgr.getWindow("TextWindow/RB6");const Checkbox* cb1 = static_cast<const Checkbox*>(winMgr.getWindow("TextWindow/CB1");Window* st = winMgr.getWindow("TextWindow/Static");if (rb4->isSelected()st->setProperty("VertFormatting", "TopAl

44、igned");else if (rb5->isSelected()st->setProperty("VertFormatting", "BottomAligned");else if (rb6->isSelected()st->setProperty("VertFormatting", "VertCentred");bool wrap = cb1->isSelected();if (rb1->isSelected()st->setProperty("H

45、orzFormatting", wrap ? "WordWrapLeftAligned" : "LeftAligned");else if (rb2->isSelected()st->setProperty("HorzFormatting", wrap ? "WordWrapRightAligned" : "RightAligned");else if (rb3->isSelected()st->setProperty("HorzFormatting&

46、quot;, wrap ? "WordWrapCentred" : "HorzCentred");return true;bool textChangedHandler(const CEGUI:EventArgs& e)using namespace CEGUI;Window* st = WindowManager:getSingleton().getWindow("TextWindow/Static");st->setText(static_cast<const WindowEventArgs&>(

47、e).window->getText();return true;class CEGUIDemoApp:public CEGUIDemopublic:bool initialiseSample()using namespace CEGUI;WindowManager& winMgr = WindowManager:getSingleton();SchemeManager:getSingleton().loadScheme("TaharezLook.scheme");System:getSingleton().setDefaultMouseCursor(&quo

48、t;TaharezLook", "MouseArrow");FontManager:getSingleton().createFont("Commonwealth-10.font");ImagesetManager:getSingleton().createImagesetFromImageFile("BackgroundImage", "GPN-2000-001437.tga");Window* background = winMgr.createWindow("TaharezLook/Sta

49、ticImage", "background_wnd");background->setPosition(UVector2(cegui_reldim(0), cegui_reldim( 0);background->setSize(UVector2(cegui_reldim(1), cegui_reldim( 1);background->setProperty("FrameEnabled", "false");background->setProperty("BackgroundEnabl

50、ed", "false");background->setProperty("Image", "set:BackgroundImage image:full_image");/设置背景图像System:getSingleton().setGUISheet(background);Window* sheet = winMgr.createWindow("DefaultWindow", "root_wnd");background->addChildWindow(sheet);PushButton* btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "QuitButton");sheet->addChildWindow(btn);btn->setText("Quit:)");btn->setPosition(UVector2(cegui_reldim(0.035f), cegui_reldim( 0.0f);btn->setSize(UVector2(cegu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论