学习和使用OGRE也有一段时间了。对于OGRE也有一定的了解。
但是总感觉自己的知识不成系统,很松散,提不起来。
最近春节放假,正好有时间学习并且系统整理一下。
其实,我也是入门,很多东西还不清楚,希望有错误大家能够帮我指出。多谢了。
首先,这个教程是建立一个可以拷贝到u盘里面到处带着走的应用程序。
我是按照OGRE的教程来建立应用程序的。原文链接如下:
这个是一个比较不错的中文翻译:
按照上面两个教程建立的应用程序工程有一个缺点,就是不好移动。
我刚刚学习的时候也有这个问题,在一台电脑上的工程,复制到另一台电脑上面,编译运行无法通过。
当时也没有找到相关的教程。所以现在回首当年我傻傻的背着电脑到处跑的经历……
工作后,上面的问题更加突出了。按照上面教程建立的工程,上传到svn等服务器后,同事下载后是无法编译运行的。
所以,我这里建立的工程是可以到u盘里面到处带走的。
一样的部分我就抄上面的了。(*^__^*) 嘻嘻……
创建一个新的项目
开启 Visual Studio 2008 新建一个projct: 文件—新建—项目 为你的项目选择好一个路径,路径不能放在 SDK目录中,或者Ogre的source目录中。
点击 “确定”按钮,显示 win32程序向导
点击 下一步选择 windows 应用程序 和 空项目 这两个选项。点击 完成。
创建目录结构并添加文件
下载并且解压缩 [Ogre Wiki Tutorial Framework]http://www.ogre3d.org/tikiwiki/Ogre+Wiki+Tutorial+Framework 到你的目录,并且添加进项目中。
修改配置:
这个时候,编译运行会产生入下错误(我编译的是release版本,我的debug已经通过了,领会精神!):
1>------ 已启动生成: 项目: OgreTest, 配置: Release Win32 ------
1>正在编译...
1>TutorialApplication.cpp
1>.\src\TutorialApplication.cpp(17) : fatal error C1083: 无法打开包括文件:“TutorialApplication.h”: No such file or directory
1>BaseApplication.cpp
1>.\src\BaseApplication.cpp(17) : fatal error C1083: 无法打开包括文件:“BaseApplication.h”: No such file or directory
1>生成日志保存在“file://f:\OgreTest\OgreTest\Release\BuildLog.htm”
1>OgreTest - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
修改如下:
首先将$(OGRE_HOME) 代表的SDK文件夹,这个拷贝到上面的项目文件夹下。并且将 文件夹名称从"sdk"改完 "OGRE_SDK”。
文件夹下内容如下:
在解决方案管理器中,右击项目名,选择属性,弹出下面的对话框
修改项目属性如下:
C/C++ | 常规 | 附加包含目录 : include;..\OGRE_SDK\include\OIS;..\OGRE_SDK\include\OGRE
生成项目,报错如下:
1>BaseApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static unsigned int __cdecl Ogre::NedPoolingPolicy::getMaxAllocationSize(void)" (__imp_?getMaxAllocationSize@NedPoolingPolicy@Ogre@@SAIXZ)
1>BaseApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static void __cdecl Ogre::NedPoolingPolicy::deallocateBytes(void *)" (__imp_?deallocateBytes@NedPoolingPolicy@Ogre@@SAXPAX@Z)
1>BaseApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static void * __cdecl Ogre::NedPoolingPolicy::allocateBytes(unsigned int,char const *,int,char const *)" (__imp_?allocateBytes@NedPoolingPolicy@Ogre@@SAPAXIPBDH0@Z)
1>TutorialApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static class Ogre::Quaternion const Ogre::Quaternion::IDENTITY" (__imp_?IDENTITY@Quaternion@Ogre@@2V12@B)
1>TutorialApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME" (__imp_?AUTODETECT_RESOURCE_GROUP_NAME@ResourceGroupManager@Ogre@@2V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A)
1>TutorialApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall Ogre::Light::setPosition(float,float,float)" (__imp_?setPosition@Light@Ogre@@QAEXMMM@Z)
1>TutorialApplication.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall Ogre::SceneManager::setAmbientLight(class Ogre::ColourValue const &)" (__imp_?setAmbientLight@SceneManager@Ogre@@QAEXABVColourValue@2@@Z)
1>F:\OgreTest\Release\OgreTest.exe : fatal error LNK1120: 135 个无法解析的外部命令
1>生成日志保存在“file://f:\OgreTest\OgreTest\Release\BuildLog.htm”
1>OgreTest - 136 个错误,2 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
都是外部链接错误。
修改项目属性如下:
选择 Debug
链接器 | 输入 | 附加依赖库 : OgreMain_d.lib OIS_d.lib
链接器 | 调试 | 生成调试信息 : 是 (/DEBUG)
选择 Release
链接器 | 输入 | 附加依赖库 : OgreMain.lib OIS.lib
链接器 | 调试 | 生成调试信息 : 否
还有 Debug和Release 都要如下设置:
链接器 | 常规 | 附加库目录 : ..\OGRE_SDK\lib\$(ConfigurationName)
编译生成项目。顺利通过。
生成应用程序
1。选择 Debug或者 Release 配置 2。右键点击 项目,选择 生成。 如果有编译或者链接错误,那请按照错误提示,重新修改属性页选项或者其他。
从 OGRE_HOME 把配置文件拷贝到程序文件夹中
作为最后一步,你的程序运行需要拷贝一些额外的文件。
生成过程创建了一个bin文件夹,在bin下,又创建了 release 和 debug文件夹,这两个文件夹下,保存着你vs编译出来的不同编译开关下的可执行性文件和其他运行需要文件。
OGRE的框架将会在配置文件中寻找工作目录,而这些配置文件(.cfg文件),保存在 $(OGRE_HOME)\bin\debug 和 $(OGRE_HOME)\bin\release这两个文件夹下,请复制到你的bin文件夹下的响应文件夹下。
移动DLL文件:
将 \OGRE_SDK\bin\debug 文件夹下面的所有文件,移动到项目生成的Debug文件夹下;
将 \OGRE_SDK\bin\release 文件夹下面的所有文件,移动到项目生成的Release文件夹下;
移动资源文件:
将D:/ogre_src_v1-7-2/Samples/Media/文件夹整个复制到项目的根目录下,让它成为和Debug文件夹、Release文件夹同级的文件夹,不要放错位置。
分别打开Debug文件夹下的resources_d.cfg和Release文件夹下resources.cfg文件。
将这两个配置文件下的所有 "D:/ogre_src_v1-7-2/Samples/Media/" 字段都修改为 "../Media/"
注意:我的OGRE安装路径为 "D:/ogre_src_v1-7-2/" 如果,你的OGRE安装路径不一样需要修改的字段就不一样,酌情处理。
修改工作路径:
选择 所有配置:
常规 | 输出目录 : ..\$(ConfigurationName)
这样就可以编译运行了。而且可以将这个ogre工程拷贝到u盘,在另一台电脑上编译运行。
啊~~我写blog好累人啊!