我試着在Android中的OpenGL ES2中實現骨骼動畫,我有一個從Blender使用io_three導出的JSON模型,我可以從這個文件讀取骨骼數組每個都有位置爲3浮點數組,四元數旋轉作爲4浮動數組和規模和一個整數是父母,我也有動畫有層次結構列表,據我瞭解,每幀處理每個骨骼矩陣,每個層次結構都有父母和鍵列表每個鍵與骨骼相同的組件,所以我讀了很多教程並做了很多嘗試,但不幸的是我沒有成功,我需要簡單地解釋邏輯。 所以我有一個骨類,每個人都有向量,我可以得到每個骨骼的相對矩陣,然後乘以它的父絕對矩陣,以獲得骨骼的絕對矩陣,然後反轉它得到反向矩陣,我可以做每個鍵的計算都一樣,但我無法將它們綁定在一起,我需要了解骨骼和每個框架之間的關係。 我的問題不在於代碼,而在於邏輯。OpenGL骨骼動畫邏輯
0
A
回答
2
我將嘗試解釋如何計算動畫的一些t
動畫骨架,其中t
位於整個動畫的開始和結束時間之間。
我可以從該文件骨骼陣列每一個有位置3個浮點數的數組,四元數旋轉如圖4個浮點數的數組和刻度讀
你也必須具有用於上述即,如果所述定時數據你的動畫中有17幀,每幀的時間信息。假設你有這個或可以從io_three
獲得這些數據,你可以計算動畫矩陣。在更精細的步驟是:
- 找到位置數據時
t
即找到2幀,次t1
和t2
這樣:t1 < t < t2
。現在您可以計算插值轉換矩陣。 - 與1相似,計算插值旋轉和比例矩陣。
- 現在找到本地動畫矩陣:A從剛剛計算的T,R,S矩陣中獲得。
- 接下來,將本地動畫矩陣與您的骨骼逆向綁定變換相乘。
- 現在與父矩陣相乘,以便您有一個累積動畫矩陣。
您可以看到這種computation here的示例:請注意,它位於ObjectiveC中,使用Assimp。
您將對骨骼中的每個骨骼執行步驟1到4,並從骨骼的根部一直往下移動,這可確保爲每個骨骼都有一個累積動畫矩陣。您以IdentityMatrix
作爲父矩陣開始。
由於您必須從骨架的根開始,您還必須知道根。要麼你的數據提供了骨架的根,要麼你必須得到骨架根。如果您有一個骨骼節點樹,那麼具有最低深度的節點將是root!
一旦您獲得了每個骨骼的動畫矩陣,您還需要知道影響每個頂點的骨骼數量以及該影響的權重。然後,您可以計算CPU或GPU上的變形頂點。請注意,both have their pros and cons。
在這個post's top answer中描述了骨骼動畫的更好的解釋,但是使用Assimp庫。總體而言,雖然骨骼動畫的整體邏輯很簡單,困難的部分是導航數據結構,其中包含所有數據並構建正確的動畫矩陣,識別骨架的根節點以及從頂點到骨骼/動畫數據的映射。
相關問題
- 1. OpenGL中骨骼動畫背後的邏輯
- 2. OpenGL骨骼動畫性能
- 3. OpenGL ES2骨骼動畫
- 4. Android OpenGL ES2骨骼動畫子骨骼矩陣
- 5. 骨骼動畫在OpenGL(GLSL)與Assimp
- 6. Collada和骨骼動畫
- 7. Assimp動畫骨骼轉換
- 8. Libgdx spine2d骨骼動畫
- 9. Three.js多個骨骼動畫
- 10. Directx 11骨骼動畫
- 11. AS3骨骼角色動畫
- 12. 如何在three.js colladaloader對象中定位骨骼(骨骼動畫)
- 13. OpenGL ES適合執行骨骼動畫嗎?
- 14. 在OpenGL ES中優化骨骼動畫的頂點
- 15. 骨骼動畫:如何手動派生Assimp骨骼偏移矩陣
- 16. 無法播放骨骼動畫
- 17. 帶親子問題的骨骼動畫
- 18. 骨骼動畫,轉換乘法
- 19. 骨骼動畫:綁定姿勢
- 20. Three.js骨骼動畫,bons重新計算
- 21. 將骨骼動畫複製到其他?
- 22. 交換mecanim骨骼的動畫
- 23. 存儲骨骼動畫的SRT值
- 24. 骨骼(骨)動畫的角度在three.js所稍有不正確
- 25. Assimp計算骨骼
- 26. Android OpenGL中的流暢動畫過渡邏輯
- 27. 模型與骨骼動畫(攪拌機出口)three.js中的動畫不正確
- 28. Unity3D:導入關鍵幀動畫(不是基於骨骼的動畫)
- 29. 骨骼工具插件,無痛純ActionScript動畫
- 30. 脊柱動畫 - 從手臂獲取骨骼跟隨鼠標
清晰明瞭的解釋,謝謝 – Mohamed