Windows编译Ogre1.10
提要
环境:
Windows8.1
VS2013
Ogre1.10 stable
cmake 3.1.1
DXSDK
Dependencies
编译
编译其实比较简单。
提前装好CMake,DXSDK。
下载1.10的源码,解压,创建一个build文件夹,源码打开CMake,将CMakeList.txt拖到界面上,将刚才的build文件夹设为目标文件夹。
有个Free type的目录需要手动设置一下。顺利的话Configure -> Generate就ok了。
进入build目录,打开vs工程,将ALL_BUILD设置为活动工程,Debug模式和Release模式都编译一遍。
最后运行Sample Browser。
1.8版本和1.9版本的源码编译出来的程序无法显示文字,目测是Windows8 VS2013上的个bug。
所有都编译之后,添加个OGRE_HOME环境变量,设置为Ogre源码的目录,后面工程设置比较方便。
加载Tutorial Application
跑这个Debug de了三天 - -.
Tutorial Application 是Ogre官网的一个学习编程框架,首先去下载 Ogre Wiki Tutorial Framework 1.10 - (Windows line endings)
在VS2013中创建一个Win32项目
选Win32项目,勾选空的项目,一直下一步就可以了。
将解压好的文件添加到工程中去,最后像这样
接下来要配置下编译类型,由于Ogre编译的是64位的,所以这里也只能编译64位的项目,右击项目,配置管理器,添加一个x64的选项。
项目上右击添加包含目录
嫌难一个个打的话,直接粘下面的就可以。
- $(OGRE_HOME)\OgreMain\include;$(OGRE_HOME)\build\include;$(OGRE_HOME)\build\Dependencies\include;$(OGRE_HOME)\build\Dependencies\include\freetype2;$(OGRE_HOME)\build\Dependencies\include\OIS;$(OGRE_HOME)\build\Dependencies\include\Cg;$(OGRE_HOME)\build\Dependencies;$(OGRE_HOME)\OgreMain\include\Threading;$(OGRE_HOME)\Samples\Common\include;$(OGRE_HOME)\Components\RTShaderSystem\include;$(OGRE_HOME)\Components\Overlay\include;$(OGRE_HOME)\Samples\Shadows\include;%(AdditionalIncludeDirectories)
接下来是添加链接库
Debug模式下要链接的库
- OIS_d.lib;OgreMain_d.lib;OgreOverlay_d.lib;%(AdditionalDependencies)
Release模式下要连接的库 copy
- OIS.lib;OgreMain.lib;OgreOverlay.lib;%(AdditionalDependencies)
设置调试环境,这样就不用拷贝dll了,配置属性->调试->环境。
debug模式设置为编译出的debug库的目录
- path=D:\VCWorkspace\ogre_1_9_0\build\bin\debug
release模式设置为编译出的release库的目录
- path=D:\VCWorkspace\ogre_1_9_0\build\bin\release
将X:\Path\of\Ogre\build\bin\debug下的
resources_d.cfg
plugins_d.cfg
和X:\Path\of\Ogre\build\bin\release下的
resources.cfg
plugins.cfg
拷贝到工程源码目录。
在TutorialApplication.cpp中添加一些代码 copy
- void TutorialApplication::createScene(void)
- {
- mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0f, 1.0f, 1.0f));
- Ogre::Entity* sinbadEnt = mSceneMgr->createEntity("sinbad.mesh");
- Ogre::SceneNode* sinbadSNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
- sinbadSNode->attachObject(sinbadEnt);
- }
就是在场景中添加sinbad.
编译运行,顺利的话就跑起来了,像这样。
遇到的一些问题
Release模式下
OGRE EXCEPTION(6:FileNotFoundException): Cannot locate resource DualQuaternion_Common.glsl in resource group Popular or any other group. in ResourceGroupManager::openResource at ..\..\..\..\OgreMain\src\OgreResourceGroupManager.cpp
shader资源没有添加,resources.cfg里添加
- [Popular]
- FileSystem=D:/VCWorkspace/ogre_1_9/Samples/Media/materials/programs/GLSL
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
工程设置不对,Ogre编译的是64位的,工程师32位的,参考这个设置一下:
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突——我的解决方案
No options available in OGRE Engine Rendering Setup.
配置窗口没有渲染系统选项。
确定目录下面有plugins.cfg文件,且里面有
- Plugin=RenderSystem_Direct3D9
- Plugin=RenderSystem_Direct3D11
- Plugin=RenderSystem_GL
添加运行终端,打印debug信息。
修改TutorialApplication.cpp
- AllocConsole();
- // Create application object
- TutorialApplication app;
- try {
- app.go();
- } catch(Ogre::Exception& e) {
- #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
- MessageBox(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
- #else
- std::cerr << "An exception has occurred: " <<
- e.getFullDescription().c_str() << std::endl;
- #endif
- }
- FreeConsole();
error LNK2019: 无法解析的外部符号 __imp___CrtDbgReportW
this kind error, just need change the C/C ->code generation-> runtime library "Multi-threaded Debug (/MTd)" ->Multi-threaded Debug DLL (/MDd)
Release模式运行正常,Debug模式崩溃,内存不能为读。
这种错误最坑,根本找不到错在哪,打断点都不好使。
一点点打印输出慢慢跟,终于发现 #ifdef _DEBUG后面的代码没有运行。
正常情况下,debug模式会定义 _DEBUG宏,但是这次没有!
手动添加, Debug模式下,配置属性 -> C/C ->预处理器->预处理器定义,添加个_DEBUG
全世界都安静了....