我试着在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