ODE物理引擎與Windows Vista的進一步說明

 

    在本書所介紹的賽車遊戲中,車子駕駛的物理效果上我們直接使用了免費好用的Open Dynamic Engine (ODE) 的.Net 版本來實作物理效果。

    ODE本身是一個公開原始碼的免費物理模擬引擎。提供一些基礎的物理效果。ODE被廣泛的使用於許多商業與免費軟體中。包括許多遊戲,以及開發遊戲的遊戲引擎或開發工具軟體。其中不乏國內學校與企業所採用的3D繪圖與遊戲製作軟體。

    除了原作者繼續改進ODE物理引擎的功能外,也有許多人協助將ODE改版到其他平台上。原本我們使用的是由James Raine先生使用ODE 0.5版所包裝的ODE.net。一些其他介紹XNA的書籍也在他們書中推薦James Raine先生的ODE.net與他的網站 (http://www.thejamesrainenetwork.co.uk ,這個網站目前已經不存在了,也許哪天又會重出江湖?) 。不過ODE.net使用的是舊版的.Net所撰寫。

    在我們撰寫本書的時候,我們嘗試了當時有的兩三種不同的.Net 版本的ODE引擎,雖然各有各的問題 (不是實作不完整,就是功能有問題),不過James Raine先生的ODE.net是當時比較好的一個.Net版本。所以本書撰寫的時候,我們也是以James Raine先生的ODE.net作為我們MiniEngine的物理模組。如果你有在網路上搜尋過XNA相關的資訊,你會發現很多舊的資料仍然是推薦使用James Raine先生的ODE.net。

    在我們撰寫本書的過程中,雖然也碰到一些功能上的小問題,不過使用James Raine先生的ODE.net一直都還順利。直到Windows Vista正式版推出後,我們第一次在Vista上安裝了XNA開發環境要測試程式時,就發現用舊版.Net撰寫的ODE.net在Vista上會導致程式執行失敗。

    一開始我們也花了一些時間把這個問題歸罪給Vista多出的許多新花樣,特別是使用者帳戶控制等等這些新的安全性強化功能。不過這些並沒有解決我們的問題(事實上是一點關係也沒有)。這使的我們不得不回歸到ODE.net本身。是否是因為ODE.net使用的是舊版的.Net編譯所造成的問題?

    和解決任何其他的問題一樣,最好的方法就是實際動手去試。於是我們使用了ODE.08版的C/C++原始程式,將它使用新的.Net 2005包裝成一個新的.Net DLL來測試。當然一開始我們只先包入一些基本的功能,做一個很簡單的DLL來測試。我們先把這個自己包裝的版本取名gravity.dll,和ODE.net的ode.net_nsr.dll區分開來。結果一執行後發現完全沒有當機,這讓我們鬆了一口氣。

    接著我們開始把更多的ODE原始碼加回gravity.dll中,直到把我們書中所用到的所有功能都加入後,終於我們的賽車可以在Windows Vista的XNA開發環境上正確執行了。所以在書中,你會發現我們前面介紹了ODE.net,但是在CD-ROM上所附的原始程式與專案中,我們附上的是我們自行改寫的gravitty.dll。

    對於gravity.dll,我們使用的是ODE 0.8版的原始程式碼,所以比之前James Raine 先生所基於的0.5版有一些小改進 (在計算的穩定性上會好一些)。不過我們做的只是包裝成.Net的改進。所以如果讀者要將我們改寫的gravity.dll用於商業用途,請遵守ODE物理引擎的免費授權規定 (它是BSD授權),參考http://www.ode.org/ode-license.html 的描述,將原始的版權宣告加入您的軟體專案中。

 

 葉思義、李震宇