OpenGL--骨骼动画
理论基础 骨骼蒙皮动画其实现类似人体模型,由节点(关节)树构成,节点间通过骨骼连接,每块骨骼至多一个父节点,父节点带动子骨骼运动。具体是关节带动其对应子骨骼运动从而牵动绑定到其上的皮肤变化。骨骼是刚体不会变形,只能绕父节点旋转(构造前面章节有提–3D世界实现中的机器人手臂例子,早期的骨骼动画就是这样,不过在关节处会有明显裂缝,所以才引出现在的蒙皮概念)。而绑定到其上的皮肤顶点则是实时变换拉伸的,变换大体就是通过一些矩阵的操作来最终计算出新顶点坐标等信息,再根据这些新顶点信息进行渲染,即通过更新顶点,渲染这样不断循环形成动画。 实现步骤总结: 一,根据更新前后两个关键帧的时间值插值计算出该时刻骨骼相对于其父骨骼的新变换矩阵–骨骼顶点信息。(本实例由于是手动控制动作,直接由变化的x,y计算) 二,再计算皮肤顶点信息,首先找到影响其顶点的所有骨骼,然后计算每一骨骼对该顶点的影响,即计算出在每个独立骨骼作用下顶点的新位置。公式如下: 最后将所有这些新位置按照每一骨骼的影响权重加权求和,得到皮肤顶点信息。 三,根据这些顶点信息进行绘制。 说明: 1,我们通常会把每个关节赋予一个索引值标志,无论是储存空间上还是查找时间上,都比直接使用关节名高效得多。因为每个关节有且仅有一个父关节,只要在每个关节储存其父关节的索引,即能表示整个骨骼结构。由于根关节无父,所以其索引通常会设为无效的索引,如-1。