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也不錯。
原創文章作者保留版權 轉載請注明原作者 并給出鏈接
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
