OGRE+vs2010编译CEGUI SDK

来源:互联网 发布:学会plc编程工资高吗 编辑:程序博客网 时间:2024/05/21 08:59

 

CEGUI初级使用方法

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

CEGUISDK的构建】

        我使用的是在官上面下载(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=newCEGUI::OgreCEGUI(myRenderWindow)

Irrlicht Engine

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

2)创建CEGUI::System对象

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

NewCEGUI::System(myRenderer);

NewCEGUI::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 3Dscene

          Draw3DScene();

//draw GUI

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

//end the scene

          myD3DDevice->EndScene();-

           //finally presentthe  frame

                           MyD3DDevice->Present(0,0,0,0)

 

OPENGL

        //user function to draw 3Dscene

                  Draw3DScene();

        //draw GUI(should not be between glBegin/End pair)

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

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

                                                            

原创粉丝点击