OGRE+vs2010编译CEGUI SDK

 

CEGUI初级使用方法

         因为最近在用Ogre,而OGRE自从1,.7.x以后便不在自己的库中对CEGUI进行直接的支持,坑爹的是他自己的overlay又写得很挫,所以大部分使用者还是需要自己进行CEGUI+OGRE的配置。

CEGUI SDK的构建】

         我使用的是在官上面下载(http://www.cegui.org.uk/wiki/index.php/Downloads)的CEGUI SDK0.7.6和其相关的依赖库,然后使用的是OGRE1.7.2+VS2010来进行构建,以下是配置步骤:

1)  首先需要对CEGUI的构建条件进行相关的设置如下(用记事本或者写字板打开sdk中的Project->premake->config.lua,对其中的文本进行如下修改:

OGRE_PATHS = { "D:/OgreME/ogre", "OgreMain/include", "lib" }               --修改 
OIS_PATHS = { "D:/OgreME/ogre/Dependencies", "include/OIS", "lib" }        --
修改 
CEGUI_OLD_OIS_API = false                    --
修改 
OGRE_RENDERER = true            --
修改 

2)  然后需要你运行build_vs2008.bat(虽然说是CEUGI最高只支持到08,但是用10转一下也是可以成功构建的),可以看到生成了CEGUI.sln,vs打开,可以看到各个CEGUI与相关图形工具的联合构建项目,因为我只使用OgreopenGL,所以着重对CEGUIOgreRendererCEGUIOpenGLrenderer进行构建(同样的,你在构建的时候需要将OgreOpengl的相关库文件添加到工程中),这时候你会发现编译出错,主要是vs08vs10的版本对于模板参数的推导检查的严格性不同引起的,CEGUI原来的代码使用0来作为空指针的方法无法推导为CEGUI::Listboxitem类型,只需要按照下面的方法做出修改即可

解决方法是把CEGUIMultiColumnList.cpp的第702行由

 

d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, 0 );

 

改成

 

d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, nullptr );

 

 

 

nullptr是提供给托管和本地两种C++语言,而__nullptr仅仅提供给本地C++。在使用vs2010开发的时候,可以直接使用__nullptr关键字。

3)  Ok,现在你可以单独build这两个工程了,成功以后你会在bin文件夹下面发现生成的相关dll文件。

4)  如果你要进行samples的构建,只需要同样运行bat文件然后打开CEGUI_samples_vs2008.sln,进行直接的编译 一般就可以通过(前提是你已经把上面生成的dlllib文件放到了包含路径中。

CEGUI的使用步骤和相关渲染器】

                                                   此部分参考了“透明果冻”转的《CEGUI使用方法一》

不管你使用的是什么引擎,都需要至少做出如下的三步,才能够使得CEGUI运行起来:

1) 创建CEGUI::Renderer对象;

各个渲染引擎的CEGUI::Renderer对象代码如下:

Direct3D 9:

CEGUi::DirectX9Renderer *myRenderer=new  CEGUI::DirectX9RenderermyD3D9Device0

OpenGL:

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

Ogre3D:

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

Irrlicht Engine

CEGUI::IrrilichRenderer*myRenderer=new CEGUI::IrrilichtRenderer(mylrrilichtDevice.true);

2) 创建CEGUI::System对象

因为上面一步已经初始化了自己的渲染器,所以只需要用CEGUI::System对象来进行系统的初始化就可以了:

New CEGUI::System(myRenderer);

New CEGUI::System(myRenderer);

3) 使用渲染函数;

因为这一步使用不同的渲染引擎会得到不同的代码,其实也就是说使用者需要在每帧渲染之后调用CEGUI::System::renderGUI,使用Ogre3D的话就不需要,因为其将由Ogre3D自动完成。而使用其他引擎的情况下需要做出如下的设置:

Directx3D9

//start the scene

           myD3DDevice->BeginScene();

//clear display

           myD3DDevice->Clear(0,0,D3DCLEAR_TARGETD3DCALOR_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/End pair)

                   CEGUI::System::getSingleton().renderGUI();

         上面所说的是使用CEGUI的必须步骤,还没有涉及到自己加载资源等内容,如想自己进行界面的添加就需要使用编辑器(也可以在官网上得到CEGUI的编辑器CElayoutEditor文件)

                                                                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值