当前位置: 首页 > 工具软件 > CEGUI > 使用案例 >

CEGUI 使用方法 一

周博达
2023-12-01

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

 类似资料: