一、环境搭建
1、 软件准备:
所需软件有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、 OGRE环境搭建
(1)、将OgreSDK_vc10_v1-7-4解压至自己所需要的目录
如我的:D:\Software\OgreSDK_vc10_v1-7-4,如下图所示
(2)、配置环境变量
我用的是win7,(XP直接在“我的电脑”-〉属性-〉高级-〉环境设置)
添加“OGRE_HOME”,内容为上步路经。
3、 安装Direcx
WIN7下,我的安装路径为“C:\Program Files (x86)\Microsoft DirectXSDK (June 2010)”。
之后,检查环境变量里是否有“DXSDK_DIR”
如果没有添加即可
4、 CEGUI配置
(1)、解压CEGUI-0.7.5至自己的路径
我的为“D:\Software\CEGUI-0.7.5”
(2)、设置环境变量
(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)、解压“CEGUI-DEPS-0.7.x-r3-vc10.zip”文件
1)、解压此文件,将其中的“dependencies”拷贝到“D:\Software\CEGUI-0.7.5”中,如下图所示
2)将“dependencies\bin”文件下的DLL文件拷贝到“D:\Software\CEGUI-0.7.5\bin”中。
(5)、打开Build
还在上步路径下找到“build_vs2008.bat”及“build_samples_vs2008.bat”直接运行他们,确认运行正确的方法:可以在当前目录下看到“CEGUI.sln”及“CEGUISamples.sln”。如果你选用的是CEGUI-0.7.6可能无法生成“CEGUISamples.sln”,那就换回CEGUI-0.7.5吧。
(6)、编译CEGUI(Debug)
在上一步后,CEGUI-0.7.5文件目录中的lib文件是空的。我们需要自己生成所需要的lib文件。
注:由于Debug生成的是“*_d.lib”而Release为“*.lib”,根据需要编译CEGUI,但是最好是分别把两种都生成完,以后直接用。
1)、打开项目
路径“D:\Software\CEGUI-0.7.5\projects\premake”下找到CEGUI.sln,打开
因为用的是VS2010 所以有一个升级过程,直接点下一步知道完成。
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 编译生成。
5、 测试CEGUISamples
首先,更改WIN7的用户权限,否则调试时出错,方法如下
“计算机->管理->本地用户和组”
选择用户“Administrator”属性,将“账号已禁用”去掉勾选如上图所示。
(1)、打开“CEGUISamples.sln”
在路径“D:\Software\CEGUI-0.7.5\projects\premake”下
(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;)”
(3)、编译整个方案,中间有错误,一般是没有相应的DLL文件,
如:缺少“OIS_d.dll、OgreMain_d.dll”可到“D:\Software\OgreSDK_vc10_v1-7-4\bin\”文件下找到
如有问题发邮件[email protected](非诚勿扰)。
到此,CEGUI配置完成。下面开始将OGRE与其进行结合。
二、OGRE与CEGUI结合
上面的状态必须都通过才能进行此步。
OGRE与CEGUI能单独运行
(1)、添加代码,测试代码如下所示。
其实现的效果只是在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;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
(2)、开始配置项目属性(Debug)(Release的话可以仿照进行相应更改)
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)
(3)、到此一般不会调试成功,因为还需要一些文件的更改
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给我,我尽我最大努力帮助解决问题。呵呵…