所需软件有OGRE:OgreSDK_vc10_v1-7-4
CEGUI:CEGUI-0.7.5.zip CEGUI-DEPS-0.7.x-r3-vc10.zip
Direcx:DXSDK_Jun10.exe
这四个软件开发包,均可在其相应的官网上进行下载。
2.1 将OgreSDK_vc10_v1-7-4解压至自己所需要的目录
如我的:D:\Software\OgreSDK_vc10_v1-7-4,如下图所示
2.2 配置环境变量
我用的是win7,(XP直接在“我的电脑”-〉属性-〉高级-〉环境设置)
添加“OGRE_HOME”,内容为上步路经。
WIN7下,我的安装路径为“C:\Program Files (x86)\Microsoft DirectXSDK (June 2010)”。
之后,检查环境变量里是否有“DXSDK_DIR”
如果没有添加即可
4.1 解压CEGUI-0.7.5至自己的路径
我的为“D:\Software\CEGUI-0.7.5”
4.2 设置环境变量
4.3 修改CEGUI的config参数
在路径“D:\Software\CEGUI-0.7.5\projects\premake”下(以后都用我的路径了,自己根据自己的路径找到相应文件),找到“config.lua”,用文本打开,修改其中的参数。将下列红字参数后的改成自己相对应的。
OGRE_PATHS = {"D:\Software\OgreSDK_vc10_v1-7-4", "include/OGRE","lib" }
OIS_PATHS= { "D:\Software\OgreSDK_vc10_v1-7-4","include/OIS", "lib" }
OPENGL_RENDERER= true
DIRECT3D9_RENDERER= true
DIRECT3D10_RENDERER= false
DIRECT3D11_RENDERER= false
IRRLICHT_RENDERER= false
OGRE_RENDERER = true
NULL_RENDERER = false
SAMPLES_GL= true
SAMPLES_DX9= true
SAMPLES_DX10= false
SAMPLES_IRRLICHT= false
SAMPLES_OGRE = true
修改完成后保存。
4.4 解压“CEGUI-DEPS-0.7.x-r3-vc10.zip”文件
4.4.1 解压此文件,将其中的“dependencies”拷贝到“D:\Software\CEGUI-0.7.5”中,如下图所示
4.4.2 将“dependencies\bin”文件下的DLL文件拷贝到“D:\Software\CEGUI-0.7.5\bin”中。
还在上步路径下找到“build_vs2008.bat”及“build_samples_vs2008.bat”直接运行他们,确认运行正确的方法:可以在当前目录下看到“CEGUI.sln”及“CEGUISamples.sln”。如果你选用的是CEGUI-0.7.6可能无法生成“CEGUISamples.sln”,那就换回CEGUI-0.7.5吧。
在上一步后,CEGUI-0.7.5文件目录中的lib文件是空的。我们需要自己生成所需要的lib文件。
注:由于Debug生成的是“*_d.lib”而Release为“*.lib”,根据需要编译CEGUI,但是最好是分别把两种都生成完,以后直接用。
6.1 打开项目
路径“D:\Software\CEGUI-0.7.5\projects\premake”下找到CEGUI.sln,打开
因为用的是VS2010 所以有一个升级过程,直接点下一步知道完成。
6.2 配置项目属性
进入“CEGUIOgreRenderer”属性页,如下图所示
l 编辑“C/C++”->“附加包含目录”,添加如下行
$(CEGUI_HOME)\Samples\common\include
$(CEGUI_HOME)\dependencies\include
$(CEGUI_HOME)\
$(CEGUI_HOME)\cegui\include
$(OGRE_HOME)\include
$(OGRE_HOME)\boost_1_47
$(OGRE_HOME)\include\OGRE
l “链接器->常规->附加库目录”
$(CEGUI_HOME)\lib
$(CEGUI_HOME)\dependencies\lib
$(OGRE_HOME)\boost_1_47\lib
$(OGRE_HOME)\lib\debug(如果为Release模式则改为$(OGRE_HOME)\lib\release)
l 编译生成。
首先,更改WIN7的用户权限,否则调试时出错,方法如下
“计算机->管理->本地用户和组”
选择用户“Administrator”属性,将“账号已禁用”去掉勾选如上图所示。
7.1 打开“CEGUISamples.sln”
在路径“D:\Software\CEGUI-0.7.5\projects\premake”下
7.2 以下配置的是“Debug”情况下的属性
l “调试”:工作目录:“$(CEGUI_HOME)\bin”
命令:$(TargetDir)\$(TargetName)_d.exe
(因为默认的命令只是调用*.exe但是为了区别Debug与Release版,生成的文件分别为*_d.exe与*.exe,而我们要警醒Debug调试,所以要写为$(TargetName)_d.exe)
l “C/C++”:附加包目录:“$(OGRE_HOME)\include;
$(OGRE_HOME)\boost_1_47;
$(OGRE_HOME)\include\OIS;
$(OGRE_HOME)\include\OGRE;
$(CEGUI_HOME)\;”
l “链接器”:附加库目录:“$(CEGUI_HOME)\lib;
$(CEGUI_HOME)\dependencies\lib;
$(OGRE_HOME)\boost_1_47\lib;
$(OGRE_HOME)\lib\debug;(当为Release时为$(OGRE_HOME)\lib\release;)”
7.3 编译整个方案,中间有错误,一般是没有相应的DLL文件,
如:缺少“OIS_d.dll、OgreMain_d.dll”可到“D:\Software\OgreSDK_vc10_v1-7-4\bin\”文件下找到
如有问题发邮件[email protected](非诚勿扰)。
到此,CEGUI配置完成。下面开始将OGRE与其进行结合。
上面的状态必须都通过才能进行此步。
OGRE与CEGUI能单独运行
其实现的效果只是在OGRE界面中添加了一个鼠标跟一个窗口(“Quit”)。
鼠标未添加移动效果。
#include "ExampleApplication.h" //...........................needadd #include <CEGUI.h> #include <CEGUIImage.h> #include <CEGUISystem.h> #include <CEGUILogger.h> #include <CEGUISchemeManager.h> #include <CEGUIWindow.h> #include <CEGUIWindowManager.h> #include <elements/CEGUIPushButton.h> #include <RendererModules/Ogre/CEGUIOgreRenderer.h> #include <RendererModules/Ogre/CEGUIOgreResourceProvider.h> #include <RendererModules/Ogre/CEGUIOgreGeometryBuffer.h> //..............needadd CEGUI::MouseButtonconvertOgreButtonToCegui(int buttonID) { using namespace OIS; using namespace CEGUI; switch (buttonID) { case OIS::MB_Left: returnCEGUI::LeftButton; case OIS::MB_Right: returnCEGUI::RightButton; case OIS::MB_Middle: returnCEGUI::MiddleButton; default: returnCEGUI::LeftButton; } } //RunFrameListener class RunFrameListener : publicExampleFrameListener{ public: RunFrameListener(RenderWindow* win, Camera*cam, CEGUI::Renderer* renderer) : ExampleFrameListener(win, cam, false, false) { mGUIRenderer = renderer; } private: CEGUI::Renderer* mGUIRenderer; }; class RunApplication : publicExampleApplication { public: CEGUI::OgreRenderer* mogreRenderer; CEGUI::Window* mEditorGUISheet; RunApplication() :mogreRenderer(0),mEditorGUISheet(0) {} voidcreateCamera() { mCamera = mSceneMgr->createCamera("PlayerCam"); mCamera->setNearClipDistance(5); } voidcreateScene() { mogreRenderer =&CEGUI::OgreRenderer::bootstrapSystem(); CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Informative); CEGUI::SchemeManager::getSingleton().create("TaharezLook.scheme"); CEGUI::System::getSingleton().setDefaultMouseCursor("TaharezLook","MouseArrow"); CEGUI::MouseCursor::getSingleton().setImage("TaharezLook","MouseMoveCursor"); mEditorGUISheet =CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow","Root"); CEGUI::System::getSingleton().setGUISheet(mEditorGUISheet); CEGUI::FrameWindow* fwnd =(CEGUI::FrameWindow*)CEGUI::WindowManager::getSingleton().createWindow("TaharezLook/FrameWindow","Demo Window"); mEditorGUISheet->addChildWindow(fwnd); fwnd->setPosition(CEGUI::UVector2(cegui_reldim(0.35f),cegui_reldim(0.45f))); fwnd->setSize(CEGUI::UVector2(cegui_reldim(0.35f),cegui_reldim(0.1f))); fwnd->setText("QUIT"); } voidcreateFrameListener() { mFrameListener = newRunFrameListener(mWindow,mCamera,mogreRenderer); mRoot->addFrameListener(mFrameListener); } }; #if OGRE_PLATFORM ==OGRE_PLATFORM_WIN32 #defineWIN32_LEAN_AND_MEAN #include"windows.h" INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) #else int main(int argc,char **argv) #endif {// Createapplication object RunApplication app; try { app.go(); } catch( Exception& e ) { #if OGRE_PLATFORM ==OGRE_PLATFORM_WIN32 MessageBoxA( NULL,e.getFullDescription().c_str(), "An exception has occurred!", MB_OK |MB_ICONERROR | MB_TASKMODAL); #else fprintf(stderr, "An exception hasoccurred: %s ", e.getFullDescription().c_str()); #endif } return 0; }
//////////////////////////////////////////////////////////////////////////////////////////////////////
l “调试”:命令:$(OGRE_HOME)\bin\debug\$(TargetFileName)
工作目录:$(OGRE_HOME)\bin\debug
l “C\C++”:附加包含目录:$(CEGUI_HOME)\Samples\common\include;
$(CEGUI_HOME)\dependencies\include;
$(CEGUI_HOME)\;$(CEGUI_HOME)\cegui\include;
$(OGRE_HOME)\include;$(OGRE_HOME)\boost_1_47;
$(OGRE_HOME)\include\OIS;$(OGRE_HOME)\include\OGRE;
l “链接器”:输出文件:$(Ogre_Home)\bin\debug\$(TargetName)$(TargetExt)
附加库目录:$(CEGUI_HOME)\lib;
$(CEGUI_HOME)\dependencies\lib;
$(OGRE_HOME)\boost_1_47\lib;
$(OGRE_HOME)\lib\debug;
$(OGRE_HOME)\lib\release;
输入:附加依赖项:OgreMain_d.lib;
OIS_d.lib;
CEGUIBase_d.lib;
CEGUIOgreRenderer_d.lib;
系统:子系统:窗口 (/SUBSYSTEM:WINDOWS)
l 将文件“D:\Software\CEGUI-0.7.5\bin”中的所有文件,拷贝到“D:\Software\OgreSDK_vc10_v1-7-4\bin\debug”文件下。其实不用全部拷,只是我懒得一个个比对了。
l 最后:配置“resources_d.cfg”中的资源,因为要调用datafiles中的资源,因此需要配置资源路径,以找到datafiles中的资源。
将datafiles的文件路径拷过来(根据自己的文件位置进行添加)。
如我的:添加如下到resources_d.cfg中
FileSystem=../../datafiles/animations
FileSystem=../../datafiles/configs
FileSystem=../../datafiles/fonts
FileSystem=../../datafiles/imagesets
FileSystem=../../datafiles/layouts
FileSystem=../../datafiles/looknfeel
FileSystem=../../datafiles/lua_scripts
FileSystem=../../datafiles/schemes
FileSystem=../../datafiles/xml_schemas
以上就是我配置OGRE+CEGUI+VS2010+WIN7x64,网上虽然有很多类似教程,但是大多都是较低版本,虽然有些乱但是最终成功了,所以啊,不要选太高的版本,否则总会出这样或那样的问题。如果大家有比较好的简单的方法,或者疑问,可以发Email给我,我尽我最大努力帮助解决问题。呵呵…
原文链接: http://blog.csdn.net/swazer_z/article/details/7566900