2010-01-23 86 views
8

我想在使用OpenGL ES的iPhone上做動畫。我可以在Blender 3D軟件中做動畫。我可以從Blender導出爲.obj文件到OpenGL,它可以在iPhone上運行。如何將Blender 3D動畫導入iPhone OpenGL ES?

但我無法將我的動畫作品從Blender 3D導出到OpenGL。任何人都可以請幫我解決這個問題嗎?

回答

1

如果你看看this article by Jeff LaMarche,你會發現一個混合器腳本,它將把3D模型輸出到C頭文件中。還有一個followup article改進了上述腳本。

運行腳本後,它就像在源代碼中包含標題一樣簡單,並通過繪圖函數傳遞頂點數組。理想情況下,您需要一種在運行時加載任意模型文件的方法,但對於此方法的原型設計來說,實現起來最簡單。

由於您已經有導入模型(obj)的方法,因此上述可能不適用。但是,使用攪拌器腳本的優點是您可以修改腳本以適應您自己的需要,也許還可以導出骨骼信息或模型關鍵幀。

1

首先,我不會爲此推薦.obj,因爲obj文件格式不支持動畫,只有靜態3D模型。因此,您需要將動畫數據導出爲與obj同時加載的單獨文件。

我會推薦哪種文件格式取決於您的動畫是什麼。我不記得Blender支持哪些文件格式,但我記得不是導出帶有動畫的Collada文件,這將是最一般的建議。其他選項可以是角色動畫的md2,或簡單的「剛性物體移動」動畫的3ds。我認爲Blender的FBX導出器可以工作,儘管該文件格式可能太複雜以至於無法滿足您的需求。


也就是說,假設你只需要簡單的剛性物體的運動,你可以使用.OBJ的3D模型的形狀,然後寫一個簡單的Python腳本輸出從攪拌機的文件具有列出的關鍵幀,與每個關鍵幀的框架,位置和旋轉關聯。然後在代碼中加載數據並在3D模型上回放這些關鍵幀。

0

我還沒有使用Blender的最新版本,但我的理解是它支持將網格動畫導出爲一系列.obj文件。如果您已經可以在您的應用中顯示一個.obj文件,那麼一個接一個地顯示它們中的幾個文件就可以達到您想要的效果。

現在請注意,這不是導出此類動畫的最有效的形式,因爲每個.obj文件都會有很多重複的信息。如果網格在一段時間內保持固定(即只有頂點與多邊形結構一起移動,uv座標等全部固定),那麼您只需導入整個第一個.obj,然後從其餘的只讀入頂點數組。

如果您想優化這個更多,您可以壓縮頂點數組,以便您只存儲與動畫的上一幀的差異。

編輯:我看到Blender 2.59已導出到COLLADA。根據Blender manual,您可以導出對象轉換,並且還可以導出已綁定對象的烘焙動畫。在iPhone應用程序中支持COLLADA格式的好處是您可以自由切換動畫工具,因爲它們大多數都會導出這種格式。

1

這是一個老問題,自那時以來,一些新的iOS框架已經發布,如GLKit。我建議儘可能多地依靠它們,因爲它們會照顧許多這樣的固有轉換,儘管我沒有研究具體細節。此外,雖然iOS不支持iOS OS X的新Scene Scene技術(可能會在iOS上推出),但將所有這些進一步完善,一個狡猾的個人可以使用該工具進行一些轉換,然後將輸出到iOS。