13.7.1 骨骼动画基本原理
骨骼动画模型的骨骼是以树状层次结构组织起来的,整个骨骼结构中有一块根骨骼,其他的骨骼都直接或间接连接到跟骨骼上,形成角色模型的整个骨骼框架。一般每块骨骼带有两个矩阵,一个是初始变换矩阵(localtransformmatrix),表示骨骼的初始位置,另一个是组合变换矩阵(combinetransformmatrix),用于对骨骼进行变换,从而实现角色动画。
(子骨骼)combinetransformmatrix= (子骨骼)localtransformmatrix * (父骨骼)combinetransformmatrix.
网格模型一般只是保存关键帧的变换矩阵,然后任意时刻用两个关键帧的矩阵差值求出。
Mat = (1 - w)*Mat1 + w *Mat2; 其中w一般用最简单的线性插值 = (s-s1)/(s2-s1).
13.7.2 骨骼动画类的设计与实现
D3DXMESHCONTAINER结构用于保存模型的网格数据(肉),D3DCFRAME用于保存模型的骨骼框架(骨头)。
CAllocateHierarchy类的设计与实现:
为了方便加载.X文件中的框架和网格模型数据,D3D提供了一个ID3DXAllocate Hierarchy接口,该接口中有四个纯虚函数:CreateFrame(), CreateMeshContainer(), DestoryFrame(), DestoryMeshContainer().