当前位置: 首页 > news >正文

从源码编译CEGUI for OGRE 的配置

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie

讨论新闻组及文件


现在在国内做游戏,似乎怎么都绕不开OGRE和CEGUI的学习,因为他们实在是太流行了。。。。。OGRE在Google中搜索game engine长期排在第一,而CEGUI又几乎是OGRE的官方UI。。。毕竟不是盖的。我第一份工作的时候就做过一些CEGUI相关的工作,(但是那时候引擎不是OGRE)但是一直没有太深入的学习,然后在游戏开发的路上绕了很大一圈,接触了OpenGL(ES),以及各色2D,3D引擎,最后似乎还是回到了OGRE和CEGUI,所以还是有些感慨。。。。。。
当自己需要从头开始做某些基础工作的时候,与拿着成熟的框架和工程感觉还是有些不一样的。比如CEGUI和OGRE的配置。。。。。。。

主要参考资料来自于《Building CEGUI for Ogre / OgreRenderer 》。
现在(2010.9.13)CEGUI的最新版是0.72,到这里下载 。(源码版本)
然后,将CEGUI解压到某个地方。我这里选择的是OGRE的目录下。
此时,CEGUI-0.7.2\projects\premake中可以看到批处理build_vs2008.bat,运行一下就可以得到想要的VS2008工程,第一次我尝试的时候编译此工程,然后拷贝相关的lib,dll到OGRE的相关目录,会发现还是少一个文件,debug版本是CEGUIOgreRenderer_d.lib,然后我发现还需要配置。这里感觉就没有那么直观了。。。。。。。。。不属于work out of box,这也是本文写作的唯一有效目的。。。。。

配置:

1。在批处理的目录下的config.lua文件中,修改如下两行内容:
OGRE_PATHS = { "..", "include/OGRE", "lib" }
OIS_PATHS = { "..", "include/OIS", "lib" }

这里第一个字符串的路径根据你将CEGUI解压的地方来配置,我这里由于CEGUI已经解压到OGRE的目录下,所以仅仅使用父目录就可以了。

2。在config.lua中,将OGRE_RENDERER那一行设为true,如下:
OGRE_RENDERER = true
3。在新版的OGRE中增加了对boost的依赖,所以还需要配置一下boost。(修改CEGUI_EXTRA_PATHS的内容)
我这里是:
CEGUI_EXTRA_PATHS = {
{ "../boost_1_42", "", "lib", "CEGUIOgreRenderer" },
}

此时会发现CEGUI的solution中会多出一个CEGUIOgreRenderer的工程。并且,经过前面的配置,路径都已经配置好了。
这里有些惊喜的是,发现了irrlicht相关的东西,呵呵,将来也可以尝试,个人对irrlicht的简单易用也印象深刻,不知道在学了OGRE后,下次还有没有机会再次使用。

然后,编译就好了,会报一堆的警告。。。。。。。。。。。。。感觉这些代码写的都有问题。。。。。在公司的代码里面,经常是一句warning都不能有的,而且这些waring都是类型转换警告。。。。估计在某些时候肯定会有问题。。。暂时不管了。

事实上,最后还会有个错误,
LINK : fatal error LNK1104: cannot open file 'OgreMain_d.lib'
因为配置的时候好像不能分debug/release来配置,(前面的文档没有讲这一点,我也没有深究了。。。。也许有办法吧)而OGRE的lib目录事实上又分debug/release子目录的。。。。。所以,其实看起来蛮自动化的配置,最后还是少不了手动干预一下。
手动修改lib目录后,问题解决。

此时将编译出来的lib,dll都拷贝到OGRE的相关目录,(因为我不准备修改CEGUI,所以简单的就拷贝了,需要修改CEGUI的,可以直接修改CEGUI工程配置,设置为编译后拷贝到相应目录)就可以直接在OGRE中使用CEGUI了,只需要再配置工程的CEGUI include目录就好。

然后,当遇到过这么多坑以后,满以为总该顺利了。。。。。。事实上,还有一个大坑在前面等着你,在最新的CEGUI版本中,你会遇到“应用程序正常初始化(0xc0150002)失败”错误,而且不会给你任何头绪。。。。。其实我费了这么多劲,非要从源码编译CEGUI和OGRE,而不是使用各自的SDK,就是因为使用SDK的时候碰到这个问题了,从经验判断应该是库的编译版本不匹配的问题,结果我自己将所有的源码都编译了一次了,还是有问题。。。。。。。。。无奈之余,在网上搜索了一下,碰到这个问题的人还不是少数。
这个哥们描述的背后的故事 。。。。。还提供了hack解决方案,牛,可惜我是用VS2008的,VS2005那个补丁不适合我,运行安装不了,我也还是希望通过正常的补丁途径解决。而这个哥们提供了完善的解决方案 。基本上,简单的说,VS2008的解决方案就是下载正确的依赖文件VC90 那个,或者直接下CEGUI SDK VS2008的SDK ,只是千万不要下VC80任何相关的东西。。。。(我很郁闷MS竟然不让VS2008在这种程度上支持VS2005,起码也能够让任何VS2005编译的东西在VS2008得到直接的支持啊)然后为自己的VS2008打上SP1补丁,就好了。这个问题真的折腾了我挺久,希望大家不要再继续被折腾了。。。。。。。。。。。。。



原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie



相关文章:

  • 2011年百度之星程序大赛初赛第一场题目(图标排列)
  • Linux shell 脚本攻略之创建不可修改文件
  • OpenCV在VC++2008 Express中的一个可恶错误!
  • .NET 读取 JSON格式的数据
  • 进程间通信
  • 海量空间数据库实施策略-栅格数据 7
  • HIVE中内连接和左半连接不一致问题
  • 海量空间数据库实施策略-栅格数据 8
  • Entity Framework 并发处理(转)
  • 总结 — 各种数据访问方式
  • 《海量空间数据库实施策略-栅格数据》PDF版本
  • WhyEngine游戏合集2014贺岁版
  • 基于属性的编辑器框架
  • Windows Phone 7 SDK 正式版本RTW
  • 解读Linux命令格式(转)
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java深入 - 深入理解Java集合
  • Java新版本的开发已正式进入轨道,版本号18.3
  • leetcode386. Lexicographical Numbers
  • php的插入排序,通过双层for循环
  • Python socket服务器端、客户端传送信息
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 产品三维模型在线预览
  • 代理模式
  • 关于Java中分层中遇到的一些问题
  • 扑朔迷离的属性和特性【彻底弄清】
  • 浅谈Golang中select的用法
  • 微服务核心架构梳理
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一个项目push到多个远程Git仓库
  • 应用生命周期终极 DevOps 工具包
  • 白色的风信子
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • Python 之网络式编程
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 移动端高清、多屏适配方案
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #{}和${}的区别是什么 -- java面试
  • $.ajax中的eval及dataType
  • (26)4.7 字符函数和字符串函数
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (LeetCode C++)盛最多水的容器
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (十六)一篇文章学会Java的常用API
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ... 是什么 ?... 有什么用处?
  • .NET BackgroundWorker
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net 调用php,php 调用.net com组件 --
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET/C# 获取一个正在运行的进程的命令行参数