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