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