CEGUI 使用方法 一

CEGUI渲染入门


不管你用的是什么引擎,至少要做如下所示最基础的三步,才能使CEGUI运行起来。

1. 创建 CEGUI::Renderer 对象。
2. 创建 CEGUI::System 对象。
3. 调用渲染函数。

当然,真正实现游戏GUI,你还需要装载相关的数据文件、进行一些最基础的初始化(这在 装载数据文件和初始化入门 一文中进行讲解),你也需要处理用户输入(这在 输入处理入门 一文中进行讲解)。

 

1. 创建 CEGUI::Renderer 对象

这一步相当直观,对于所支持的渲染组件(比如:Direct 3D9, OpenGL, Ogre3D等),这步应该没有问题。当然,要记得包含所使用渲染组件的头文件。还有,Ogre3D现在已经将它的渲染组件改为Ogre而不是CEGUI。(切记:在程序结束的时候,要删除此Renderder对象)

创建 CEGUI::Renderer 对象代码如下:

Direct3D 8.1   
  
CEGUI::DirectX81Renderer* myRenderer =   
   new CEGUI::DirectX81Renderer( myD3D8Device );   
  
  
Direct3D 9   
  
CEGUI::DirectX9Renderer* myRenderer =   
   new CEGUI::DirectX9Renderer( myD3D9Device, 0 );   
  
  
OpenGL   
  
CEGUI::OpenGLRenderer* myRenderer =    
   new CEGUI::OpenGLRenderer( 0 );   
  
  
Ogre3D   
  
CEGUI::OgreCEGUIRenderer* myRenderer =    
   new CEGUI::OgreCEGUIRenderer( myRenderWindow );   
  
  
Irrlicht Engine   
  
CEGUI::IrrlichtRenderer* myRenderer =    
   new CEGUI::IrrlichtRenderer( myIrrlichtDevice, true ); 
Direct3D 8.1

CEGUI::DirectX81Renderer* myRenderer =
   new CEGUI::DirectX81Renderer( myD3D8Device );


Direct3D 9

CEGUI::DirectX9Renderer* myRenderer =
   new CEGUI::DirectX9Renderer( myD3D9Device, 0 );


OpenGL

CEGUI::OpenGLRenderer* myRenderer =
   new CEGUI::OpenGLRenderer( 0 );


Ogre3D

CEGUI::OgreCEGUIRenderer* myRenderer =
   new CEGUI::OgreCEGUIRenderer( myRenderWindow );


Irrlicht Engine

CEGUI::IrrlichtRenderer* myRenderer =
   new CEGUI::IrrlichtRenderer( myIrrlichtDevice, true );


2. 创建 CEGUI::System 对象来对系统进行初始化

这一步更简单。只需new一个CEGUI::System对象,并把刚创建的CEGUI::Renderer对象的指针传送给它即可。这时整个系统将自动初始化。

new CEGUI::System( myRenderer ); 
new CEGUI::System( myRenderer );


3. 调用渲染函数

这一步有点特殊,所使用的引擎不同,此步的代码也会不同。不过,说白了,你所要做的只是在每帧渲染后调用CEGUI::System::renderGUI而已。使用Ogre3D的同学该高兴了,因为它将由Ogre3D自动完成。对于使用其他引擎的同学,代码也很简单,如下:

Direct3D 8.1 / 9   
  
// Start the scene   
myD3DDevice->BeginScene();   
  
// clear display   
myD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), /   
                    1.0f, 0);   
  
// user function to draw 3D scene   
draw3DScene();   
  
// draw GUI   
CEGUI::System::getSingleton().renderGUI();   
  
// end the scene   
myD3DDevice->EndScene();   
  
// finally present the frame.   
myD3DDevice->Present(0, 0, 0, 0);   
  
  
OpenGL   
  
// user function to draw 3D scene   
draw3DScene();   
  
// draw GUI (should not be between glBegin/glEnd pair)   
CEGUI::System::getSingleton().renderGUI();   
  
  
Irrlicht   
  
// start the scene   
myIrrlichtDriver->beginScene(true, true, /   
                            irr::video::SColor(150,50,50,50));   
  
// draw main scene   
myIrrlichtSceneManager->drawAll();   
  
// draw gui   
CEGUI::System::getSingleton().renderGUI();   
  
// end the scene   
myIrrlichtDriver->endScene(); 
Direct3D 8.1 / 9

// Start the scene
myD3DDevice->BeginScene();

// clear display
myD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), /
     1.0f, 0);

// user function to draw 3D scene
draw3DScene();

// draw GUI
CEGUI::System::getSingleton().renderGUI();

// end the scene
myD3DDevice->EndScene();

// finally present the frame.
myD3DDevice->Present(0, 0, 0, 0);


OpenGL

// user function to draw 3D scene
draw3DScene();

// draw GUI (should not be between glBegin/glEnd pair)
CEGUI::System::getSingleton().renderGUI();


Irrlicht

// start the scene
myIrrlichtDriver->beginScene(true, true, /
       irr::video::SColor(150,50,50,50));

// draw main scene
myIrrlichtSceneManager->drawAll();

// draw gui
CEGUI::System::getSingleton().renderGUI();

// end the scene
myIrrlichtDriver->endScene();


总结

这只是使CEGUI运行的最初步的介绍。还有好多东西没有提到,比如:在Ogre中应用不同的场景管理器(scene managers),更高级的如:用户自定义资源载入器(resource providers)等等。


原文作者:CrazyEddie
原作日期:03:34, 9 February 2008 (PST)
原文地址:The Beginner Guidet to Getting CEGUI Rendering
翻 译 者:天外|OutSky
翻译日期:2008-09-26 16:12

以前,我曾幻想自己做所有东西,包括游戏GUI。现在,我才发现这种想法多么幼稚。更体会到开源精神的伟大!
请尊重版权,转载请注明出处;代码及文章如需用于商业用途需经本人同意
本文永久链接:http://www.outsky.org.cn/article.php?action=read&category=1400&page=1&id=12


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pepper6681747/archive/2008/10/25/3142579.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk)是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,比如OGRE、Irrlicht和RenderWare等,关键需求可以简化为二点: 纹理(Texture)的支持直接写屏(RHW的顶点格式、正交投影、或者使用shader实现) 本书截止日时,CEGUI的最新版本是0.6.0(本书的讨论也是基于此版本),本书光盘提供了SDK和全部源码的下载。 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor和ImageSet编辑器,以方便UI和图像集的制作。作为界面编辑器,它需要系统级界面以提供编辑器操作,0.3.0版是基于MFC实现的;而在0.4.0版本以后,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见http://www.wxwidgets.org)实现。 目前将CEGUI作为游戏界面库开发的游戏已经有好多种,国内的天龙八部,巨人等游戏就是很好的例子。 CEGUI的功能是非常强大的,而且使用也非常的灵活,可以和脚本配合。可以通过配置文件自定义窗口外观。通过布局文件实现窗口布局等等特性,使得游戏的界面开发更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值