环境:win7(64位)+vs2010+orge1.8.1
说明:orge1.8.1不需要安装vs2010 sp1,自身带了opengl,也不需要安装dx和gl。
安装SDK,运行Demo
下载:
1 OGRE SDK: http://www.ogre3d.org/download/sdk
2 OGRE Dependencies:http://sourceforge.net/projects/ogre/files/ogre-dependencies-vc++/1.7/
OGRE Dependencies是Ogre进行编译时需要的支持文件,一般包括OIS库,CG库,GUI库,这些库在Ogre中均经常用到。如果缺少这些文件,则源码无法进行编译,后期编译出来的Ogre也无法使用OIS、CG、GUi等。
3 Cmake : http://www.cmake.org/cmake/resources/software.html
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。OGRE从1.7开始使用Cmake生成工程文件,主要为方便平台移植。
4 OGRE 工程向导: http://download.csdn.net/detail/sangni007/5185193 (版本问题,已经失效估计是针对1.7的)
配置步骤:
1 解压OgreSDK_vc10_v1-8-1.exe,将解压得到的OgreSDK_vc10_v1-8-1放在D:corgeorgeSpace
2 设置环境变量,变量名:ORGE_HOME 变量值D:corgeorgeSpaceOgreSDK_vc10_v1-8-1
3 解压Dependencies得到Dependencies文件夹啊,放到D:corgeorgeSpaceOgreSDK_vc10_v1-8-1中
4 进入D:corgeorgeSpaceOgreSDK_vc10_v1-8-1Dependenciessrc打开vs2010.sln,分别在Released,Debug下进行编译(vs2010->Build->Configuration Manger中切换)
5 进入D:corgeorgeSpaceOgreSDK_vc10_v1-8-1(注意不是进入D:corgeorgeSpaceOgreBuild),打开Ogre.sln,编译工程,把SampleBrowser设置为默认启动项(默认是AllBuild为启动项)。运行即可,运行时选择opengl。
安装工程向导
安装Ogre_VC10_AppWizard_1.8.0.exe到SDK目录下
源码编译
1 解压源码
2 把Dependencies放到解压后的 D:corgeorgeSpaceogre_src_v1-8-1中
3 进入D:corgeorgeSpaceOgreSDK_vc10_v1-8-1Dependenciessrc打开vs2010.sln,分别在Released,Debug下进行编译(vs2010->Build->Configuration Manger中切换)
4 打开cmake,设置好路径如下图,然后两下Configure,一下Generate
5 打开D:corgeorgeSpaceOgre_src_sdkOGRE.sln 分别在release,debug下编译,然后会在D:corgeorgeSpaceOgre_src_sdkin
elease(debug)下会产生我们需要的dll文件,release和debug中都有相关配置文件,另外D:corgeorgeSpaceOgre_src_sdkin中minsizerel,relwithdebinfo两个文件夹中也有相关配置文件,我们可以利用这些配置文件和生成的dll文件来手动构建自己的ogre工程。
手动(用源码)构建工程
1 新建win32工程
也可使用空工程,需要做些配置,Linker->System->SubSystem:Windows (/SUBSYSTEM:WINDOWS)
2 引入头文件
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1includeOGRE;
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1includeOIS;
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1include;(include下没有.h文件但是代码里有的引用是带有文件夹目录的比如<OIS/OIS.h>,所以不引include会出问题)
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oost;
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1includeOIS;
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1include;(include下没有.h文件但是代码里有的引用是带有文件夹目录的比如<OIS/OIS.h>,所以不引include会出问题)
D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oost;
这里用的sdk的头文件,也可以用源码的头文件,直接copy到当前工程新建个lib就ok
源码的头文件位于,cmake编译前的D:corgeorgeSpaceogre_src_v1-8-1OgreMaininclude
OIS是独立库,头文件直接从sdk中取
3 引入库文件
kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOgreMain.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOIS.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOgrePaging.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOgreTerrain.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOgreProperty.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1lib eleaseOgreRTShaderSystem.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oostliblibboost_thread-vc100-mt-gd-1_49.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oostliblibboost_date_time-vc100-mt-gd-1_49.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oostliblibboost_date_time-vc100-mt-1_49.lib D:corgeorgeSpaceOgreSDK_vc10_v1-8-1oostliblibboost_thread-vc100-mt-1_49.lib
部分库可能不是必须的,没做详细区分,这里用的sdk的库文件,也可用源码生成的库
源文件编译后的
lib位于D:corgeorgeSpaceOgre_src_sdklib
elease(debug)
dll位于D:corgeorgeSpaceOgre_src_sdkin
elease(debug)
4 代码
FirstOgre.h
#pragma once #include "resource.h" #include "ExampleApplication.h" class FirstOgre : public ExampleApplication { protected: public: FirstOgre(); ~FirstOgre(); protected: void createScene(void); };
FirstOgre.cpp
#include "stdafx.h" #include "FirstOgre.h" using namespace std; FirstOgre::FirstOgre() { } FirstOgre::~FirstOgre() { } void FirstOgre::createScene(void) { Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh"); Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); headNode->attachObject(ogreHead); // Set ambient light mSceneMgr->setAmbientLight(Ogre::ColourValue(0.5, 0.5, 0.5)); // Create a light Ogre::Light* l = mSceneMgr->createLight("MainLight"); l->setPosition(20,80,50); } INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT ) { cout<<"fuck0"<<endl; FirstOgre app; try { app.go(); } catch( Ogre::Exception& e ) { //MessageBox( NULL, e.getFullDescription().c_str(), "An exception", MB_OK | MB_ICONERROR | MB_TASKMODAL); } cout<<"fuck1"<<endl; return 0; }
5 配置工程属性
1 直接把相关输出目录,调试目录设置到sdk目录下
General->Output Directory:设置到SDK目录->bin->release(Debug)
Debugging->Working Directory:设置到SDK目录->bin->release(Debug)
Link->General->Output File:设置到SDK目录->bin->release(Debug)->工程名.exe
2 纯手动,相关目录就用当前工程,不设置到sdk目录
General->Output Directory:使用默认设置$(SolutionDir)$(Configuration)
Debugging->Working Directory:默认设置为$(ProjectDir),需要修改为$(SolutionDir)$(Configuration)
Link->General->Output File:这个使用默认配置
这种方法需要将如下文件copy到当前工程的realease(debug)文件夹中
1 修改plugins.cfg 把 Plugin=RenderSystem_Direct3D9这个注释掉,ogre里面自带的是opengl包,不需要d3d的东西,启动后选择d3d和opengl的界面只有opengl选项
2 修改resources.cfg 把media相关的引用路径都改成sdk里面media的路径,这个文件默认是使用的相对路径
3 OIS.dll是独立库,不是源码编译出来的,直接从ogre sdk中copy
4 OgreProperty.dll,Direct3D9.dll在例子程序中没用到,可以去掉
5 cg.dll这个是从源码的D:corgeorgeSpaceogre_src_v1-8-1DependenciesinRelease文件夹下copy来的,没这个文件会闪退(暂时搞不清这个库在sdk工程中是怎么引用的,动态?待议)