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

整合Bullet物理引擎到Ogre on iPhone

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

讨论新闻组及文件

为什么选择Bullet

Bullet 算是一个比较流行的3D物理引擎了,大概的看了几眼以后,了解了一些基本用法,发现很多3D物理中的概念与2D(比如Box2d)中的概念是相同的,甚至,Bullet的一些用法都与Box2D类似。基本了解以后,对于我来说,那就是iPhone平台的问题了。
我选择Bullet而不是其它一大堆同样著名的物理引擎,主要源自乌龙(oolongengine ) 引擎,该引擎由wolfgang.engel最先创建,并且内嵌了bullet的支持,竟然如此大牛都青睐的引擎,我怎么能无视呢?何 况,oolongengine的使用,也说明Bullet在iPhone中使用完全没有问题。另外,还有Blender这个非常著名的3D建模工具也是对 Bullet有直接支持,可见Bullet的流行程度。事实上,还有些故事,比如oolongengine的项目负责人之一erwin.coumans, 同时就也是Bullet的项目创建者兼现在的负责人。(到Google Code上去看看就知道了)并且,erwin提到,Bullet能够流畅的在iPhone上运行,wolfgang提供了很大的帮助,对浮点运算进行了特 别优化。最有意思的是,迪斯尼公司,自己的一些项目用到了Bullet,(看主页上的介绍,起码玩具总动员3这个游戏用到了Bullet)所以开发了自己 的MAYA Bullet插件,为了回报开源社区,已经将此插件开源了。。。。。感谢Bullet,也感谢迪斯尼,同时感叹国外这种开源社区之间的交互。。。。。呵 呵,这才叫欣欣向荣的良性发展,你帮助我,我帮助你,公司受到帮助,也对社区进行回报。知道了这么多故事以后,更加是对Bullet多了很多好感。最值得 一提的是,erwin 简直就是个开源狂人。。。。。他还发起过一个叫做gamekit 的开源游戏引擎项目,希望整合Ogre/Irrlicht和Bullet,因为是erwin创建的项目,也非常值得期待。。。。。。。
闲话多说一向是我的毛病。。。。也就说到这里了,用以前的OGRE on iPhone 工程直接开工了。


在XCode中编译Bullet和OgreBullet

初下载Bullet后,用CMake做工程,只能做Mac OS X的工程,没有iPhone的选项,于是参考一下乌龙引擎的做法,就是将整个Src目录都拷贝进自己的工程,好像是从iPhone开始,流行这种"暴力" 使用源代码的方式了。。。。。只能说Apple的XCode开发的还不足够人性化,所以建库的工程没有VS那么方便,再加上iPhone天生的不支持动态 库,更加助长了这种“暴力”使用源代码的方式,其实每次修改工程文件编译都会慢很多,无奈啊。。。。。在Bullet的论坛中,搜索到erwin的准官方解决方案 就是拷贝全部目录。。。。汗一个-_-!
既然如此,一切倒是简单了。。。。。下载Bullet的源码 ,目前最新的是2.77,拷贝Src目录,删掉无用文件,比如CMake的一些文件。(或者直接从oolong引擎中将整个Bullet目录拷贝过来最简单,只不过版本目前是2.73)然后配置Bullet的Include目录,编译,一切OK。
现在开始尝试嵌入OgreBullet,方法还是直接包含源代码。比较特殊点的是OgreBullet需要用到Bullet的 ConvexDecomposition,这个库在Bullet的Extra中,也将源代码都拖过来,然后弄好include目录,就没有问题了。


测试

现在进入测试阶段,就用OgreBullet的Tutorial 中 的例子。源代码全部拷贝过来,唯一的问题是ExampleApplication在iPhone中有些小问题,修改一下函数,namespace后问题解 决。运行时崩溃,查看问题,还是ExampleApplication这个类的问题,难怪在Ogre的iPhone template不用这个类,崩溃的地方很有意思,OIS获取键盘的时候:
mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject( OIS::OISKeyboard, bufferedKeys ));
注释更加有意思:
//Create all devices (We only catch joystick exceptions here, as, most people have Key/Mouse)
典型反映了代码永远赶不上时代变化,既然这个类已经不被人使用了,我也就不费劲去用了,将原来的例子代码全部嵌入到OgreFramework类中。
运行,崩溃,发现忘了添加新增的资源,将BumpyMetal.jpg材质和cube.mesh模型添加进工程。再次运行,一些正常,有图有真相:



当一切都OK以后,我发现我的目标竟然与GameKit是一样的。。。。。不就是Ogre+Bullet吗?erwin 估计以前就已经想过我所想了。。。。。也许,尝试下GameKit也不错。

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

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

相关文章:

  • CDMA的定位方式
  • Bullet的3D Max插件
  • 判断字符串中字符最多的那一个及个数
  • 两个最容易被人忽略的基本代码优化技术
  • Windows的达尔文进化图
  • 算法面试:精选微软经典的算法面试100题(第1-20题)
  • 讨论PV原语、解答PV疑惑
  • 一个PV操作题引发的思考,如何看待进程间同步、互斥
  • windows中控制台中在同一行打印信息
  • 《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile
  • 《Linux内核修炼之道》 之 高效学习Linux驱动开发
  • 《Linux内核修炼之道》 之 高效学习Linux内核
  • 嵌入式系统开发:Arm与Linux的完美结合
  • 浅析如何学习基于ARM平台的嵌入式系统
  • 谢尔宾斯基三角(Sierpinski triangle)的显示 (with OpenGL)
  • hexo+github搭建个人博客
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • angular2开源库收集
  • css属性的继承、初识值、计算值、当前值、应用值
  • Gradle 5.0 正式版发布
  • Java IO学习笔记一
  • JavaScript的使用你知道几种?(上)
  • JS笔记四:作用域、变量(函数)提升
  • node入门
  • PHP CLI应用的调试原理
  • Python - 闭包Closure
  • Python利用正则抓取网页内容保存到本地
  • 记录:CentOS7.2配置LNMP环境记录
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 浅谈Golang中select的用法
  • 深入浅出webpack学习(1)--核心概念
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微服务核心架构梳理
  • 我这样减少了26.5M Java内存!
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #QT项目实战(天气预报)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (差分)胡桃爱原石
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (已解决)什么是vue导航守卫
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET MVC第五章、模型绑定获取表单数据
  • .net Signalr 使用笔记
  • .NET 指南:抽象化实现的基类
  • .Net(C#)自定义WinForm控件之小结篇
  • .net/c# memcached 获取所有缓存键(keys)