【转】构建 ogre1.6 + cegui0.7.1 + CELayoutEditor-0.7.1

本文档详细介绍了如何在Windows环境下使用Visual Studio 2008编译Ogre 1.6.5和CEGUI 0.7.1,并整合二者实现图形用户界面的渲染。包括下载源代码、配置环境、编译步骤、测试及常见问题解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需要下载的东西,我一般都是下载的源代码,编译器是vs2008(sp1),系统是xp(sp3)。
1、编译ogre
ogre:http://www.ogre3d.org/download/source
在这里面找到源代码 OGRE 1.6.5 Source For Windows  依赖包: Visual C++.Net 2008 (9.0) Precompiled Dependencies
可能要用到DX的sdk,我不知道,反正我是安装了的。
解压ogre源代码,解压依赖包,要把依赖包解压到ogre源代码里(Dependencies文件夹)
编译,生成需要的lib,dll。
2、编译CEGUI
CEGUI:http://www.cegui.org.uk/wiki/index.php/CEGUI_Downloads_0.7.1
在这里面找到源代码
CEGUI 0.7.1 Library Source Downloads
This package contains the source code supplied as a compressed zip archive. It is intended for Microsoft Windows users. Download Now!
依赖包:
CEGUI 0.7.1 Binary Downloads for Microsoft Visual C++ 2008
This package contains a set of precompiled external libraries used by CEGUI supplied as a compressed zip archive. This dependencies package is needed to build CEGUI 0.7.1 from source. Download Now!
解压CEGUI源代码和依赖包
2.1  在CEGUI-0.7.1\projects\premake里面点“build_vs2008.bat”,然后就会生成一个“CEGUI.sln”
然后打开编译,生成需要的lib,dll。

现在ogre和cegui已经差不多搞好了,不过中间差个连接的东西。ogre里面叫“OgreGUIRenderer”,cegui里面叫
“CEGUIOgreRenderer”。我们现在不用ogre里的“OgreGUIRenderer”,这个太老了。用“CEGUIOgreRenderer”。
这时我发现“CEGUI.sln”没有这个项目,这要在“CEGUI-0.7.1\projects\premake\config.lua”设置
找到:按下面修改(路径改成ogre源代码文件夹的路径)
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            --修改
然后在点build_vs2008.bat,打开“CEGUI.sln”,看下有没有“CEGUIOgreRenderer”项目。
如果有就好了,修改下项目属性的include和lib路径(好像是自动生成的吧,我忘了)
先编译也可以如果通过就别修改路径了,没通过就改下。 如果你安装过ogreSDK,一定要看下include和lib的路径,别指向sdk里面了,要指向刚刚下的ogre源代码和CEGUI的源代码。

3、测试ogre+cegui

3.1 在ogre里找一个cegui的例子,然后修改项目属性的include和lib路径( 指向刚刚下的ogre源代码和CEGUI的源代码

3.2 改头文件,把那个
#include <OgreCEGUIRenderer.h>
改成
#include <CEGUIOgreRenderer.h>


mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow,Ogre::RENDER_QUEUE_OVERLAY,false,3000,mSceneMgr);
mGUISystem = new CEGUI::System(mGUIRenderer);
改成
CEGUI::OgreRenderer::bootstrapSystem();


CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");
mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook",(CEGUI::utf8*)"MouseArrow");
mGUISystem->setDefaultFont((CEGUI::utf8*)"simhei");
改成
CEGUI::SchemeManager::getSingleton().create((CEGUI::utf8*)"TaharezLookSkin.scheme");
CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");
CEGUI::System::getSingleton().setDefaultFont("simhei");

还有别的地方可能要改,我就试了这几处,对了,还要在最后释放
CEGUI::OgreRenderer::destroySystem();

反正就是照葫芦画瓢。

4、编译CELayoutEditor-0.7.1

CELayoutEditor:http://www.cegui.org.uk/wiki/index.php/CELayoutEditor_Downloads_0.7.1
方法和cegui一样,页面也差不多

4.1 这个要依赖wxWidgets
wxWidgets-2.8.10:http://www.wxwidgets.org/downloads/
找到: wxMSW - installer for Windows, with manual (other formats: zip)
下载安装配置
在路径 D:\wxWidgets-2.8.10\build\msw 下修改 config.vc
修改为:
UNICODE = 1
USE_OPENGL = 1

在路径 D:\wxWidgets-2.8.10\include\wx\msw 下 修改setup.h
修改为:
#define wxUSE_UNICODE 1
#define wxUSE_GLCANVAS       1
(wxWidgets-2.8.10里面有很多setup.h,我修改的是wxWidgets-2.8.10\lib\vc_lib\mswud\wx里面的setup.h,这样看你的CELayoutEditor引用的是那里的头文件)
打开vs2008的命令行,可在菜单vs2008目录vs tools下找到:Visual Studio 2008 命令提示

点击弹出:


进入目录 cd D:\wxWidgets-2.8.10\build\msw
nmake -f makefile.vc

编译一堆,等待。。。

在 D:\wxWidgets-2.8.10\lib\vc_lib 下生成需要的lib文件

(如果想重新编译,就删除“wxWidgets-2.8.10\build\msw\vc_mswud”里的文件,因为我不会用 nmake命令)
(默认是debug模式,要改为release需要找到config.vc文件,设置 “BUILD = release”,然后再编译就可以了)

4.2 修改CELayoutEditor项目里的include和lib,方法和先前一样。里面有个$(WXWIDGETS_7)环境变量
在“我的电脑” “属性” 里面增加一条“ WXWIDGETS_7             D:\wxWidgets-2.8.10”,在CELayoutEditor项目里改是一样的。

4.3 编译CELayoutEditor项目,如果报错说,有个什么类没定义,
error C2504: 'wxGLCanvas' : base class undefined

就要修改 setup.h文件(有很多,自己试下)修改为:
#define wxUSE_UNICODE          1
#define wxUSE_GLCANVAS       1

4.4 运行CELayoutEditor_d.exe,打开datafiles文件夹,这个要打开cegui里面的datafiles文件夹

截个图,这个版本对中文支持还蛮好,自己照着写个font文件放在datafiles\fonts

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Re:ogre1.7.1 与 cegui 0.7.1的兼容问题

问题解决了,按cegui自己的说法,出现这样的问题是因为cegui绎出的SDK早于ogre发布版,可能出现冲突,细节我也没深挖,毕竟我只想用它,而且我是菜鸟。

我下了最新2010.6.7的CEGUI-snapshot-0.7.100607-vc8版本的(里面的samples不再直接针对ogre了,但对d3d和opengl渲染器是开放的),设置好路径,运行ogre测试程序,就ok了。

源代码关键部分(VS属性中应包含相应目录):
//.h:
#include <CEGUI.h>
#include <RendererModules/Ogre/CEGUIOgreRenderer.h>
#include <XMLParserModules/XercesParser/CEGUIXercesParser.h>

#ifdef _DEBUG
#pragma comment(lib,"CEGUIBase_d.lib")
#pragma comment(lib,"CEGUIOgreRenderer_d.lib") //注意,用什么渲染器就应包含相库
#pragma comment(lib,"CEGUIXercesParser_d.lib")
#else
#pragma comment(lib,"CEGUIBase.lib")
#pragma comment(lib,"CEGUIOgreRenderer.lib")
#pragma comment(lib,"CEGUIXercesParser.lib")
#endif

//.cpp 这里直接copy网上的代码:
CEGUI::OgreRenderer &myRenderer = CEGUI::OgreRenderer::create();
CEGUI::System::create( myRenderer );

CEGUI::DefaultResourceProvider* rp;

rp = static_cast<CEGUI::DefaultResourceProvider*>
(CEGUI::System::getSingleton().getResourceProvider());
rp->setResourceGroupDirectory("schemes", "../datafiles/schemes/");
rp->setResourceGroupDirectory("imagesets", "../datafiles/imagesets/");
rp->setResourceGroupDirectory("fonts", "../datafiles/fonts/");
rp->setResourceGroupDirectory("layouts", "../datafiles/layouts/");
rp->setResourceGroupDirectory("looknfeels", "../datafiles/looknfeel/");
rp->setResourceGroupDirectory("lua_scripts", "../datafiles/lua_scripts/");
rp->setResourceGroupDirectory("schemas", "../datafiles/xml_schemas/");
CEGUI::Imageset::setDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
CEGUI::WindowManager::setDefaultResourceGroup("layouts");
CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");
CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();

if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
parser->setProperty("SchemaDefaultResourceGroup", "schemas");
CEGUI::SchemeManager::getSingleton().create( "TaharezLook.scheme" );
CEGUI::System::getSingleton().setDefaultFont( "DejaVuSans-10" );
CEGUI::System::getSingleton().setDefaultMouseCursor( "TaharezLook", "MouseArrow" );
WindowManager& wmgr = WindowManager::getSingleton();
Window* myRoot = wmgr.createWindow( "DefaultWindow", "root" );
System::getSingleton().setGUISheet( myRoot );
FrameWindow* fWnd = static_cast<FrameWindow*>(wmgr.createWindow( "TaharezLook/FrameWindow", "testWindow" ));
myRoot->addChildWindow( fWnd );
fWnd->setPosition( UVector2( UDim( 0.25f, 0 ), UDim( 0.25f, 0 ) ) );
fWnd->setSize( UVector2( UDim( 0.5f, 0 ), UDim( 0.5f, 0 ) ) );
fWnd->setText( "Hello World!" );

程序执行要成功,我是在自己工程的bin下放了datafiles,同时,在debug或release下放入了下面:
1、ogre运行支持库,直接从ogrehome下的bin文件夹debug或release中copy;
2、cegui运行支持库,直接从ceguihome下的bin文件夹中copy; 同时copy加入ceguihome\dependencies\bin下的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值