Windows编译Ogre1.10

提要

环境:

Windows8.1 

VS2013

Ogre1.10 stable

cmake 3.1.1

DXSDK Download

Dependencies  Download


编译

编译其实比较简单。

提前装好CMake,DXSDK。

这里下载1.10的源码,解压,创建一个build文件夹,源码打开CMake,将CMakeList.txt拖到界面上,将刚才的build文件夹设为目标文件夹。

有个Free type的目录需要手动设置一下。顺利的话Configure -> Generate就ok了。


Windows编译Ogre1.10



进入build目录,打开vs工程,将ALL_BUILD设置为活动工程,Debug模式和Release模式都编译一遍。


最后运行Sample Browser。


Windows编译Ogre1.10



Windows编译Ogre1.10


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项目

Windows编译Ogre1.10

选Win32项目,勾选空的项目,一直下一步就可以了。


将解压好的文件添加到工程中去,最后像这样

Windows编译Ogre1.10


接下来要配置下编译类型,由于Ogre编译的是64位的,所以这里也只能编译64位的项目,右击项目,配置管理器,添加一个x64的选项。

Windows编译Ogre1.10


项目上右击添加包含目录

Windows编译Ogre1.10


嫌难一个个打的话,直接粘下面的就可以。

$(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)


接下来是添加链接库

Windows编译Ogre1.10


Debug模式下要链接的库

OIS_d.lib;OgreMain_d.lib;OgreOverlay_d.lib;%(AdditionalDependencies)


Release模式下要连接的库

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


Windows编译Ogre1.10


将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中添加一些代码

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.


编译运行,顺利的话就跑起来了,像这样。

Windows编译Ogre1.10



遇到的一些问题

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();


Release模式运行正常,Debug模式崩溃,内存不能为读。

这种错误最坑,根本找不到错在哪,打断点都不好使。

一点点打印输出慢慢跟,终于发现 #ifdef _DEBUG后面的代码没有运行。

正常情况下,debug模式会定义 _DEBUG宏,但是这次没有!

手动添加, Debug模式下,配置属性 -> C/C++->预处理器->预处理器定义,添加个_DEBUG

Windows编译Ogre1.10


全世界都安静了....



参考

Setting Up An Application With Visual Studio - http://www.ogre3d.org/tikiwiki/Setting+Up+An+Application+-+Visual+Studio

fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突——我的解决方案 - http://blog.csdn.net/tfy1028/article/details/8660823

OGRE之第一个程序 - http://blog.csdn.net/beyond_ray/article/details/25742969#reply

Windows编译Ogre1.10

上一篇:百度地图开放API初体验(三)


下一篇:c#(winform,webform通用)利用npoi将xls文件复制为xlsx文件(excel的修改,保存,包括excel2003-office2007+的处理)