最近,在研究惯性动作捕捉仪Xsens,通过其提供的SDK来读取model的各个关节节点的数据,然后驱动3D角色模型产生实时动画。我的初步设想是利用DirectX做3D动画展示,DX做骨骼动画比较方面(可以利用自带的.X文件)。
回到动捕数据的读取上来,Xsens MVN SDK提供了函数可连接动捕硬件,并读取运动数据。在SDK文档中给出了程序建议的设计流程:先做各种姿态校正(如T-Pose等),不是很明白这些校正具体能有什么作用,只是听卖方来培训的人说,是校正姿态,可以得到更加精准的数据,我个人估计不做这些校正也是可以用的。Xsens MVN还自带了一个.MVN的2进制文件,可以直接将动捕的数据通过其提供的studio保存至mvn文件,mvn文件的读取和实时读取动捕数据的方法基本是一致的,在早期测试代码时,我都是用MVN文件做测试,这样就省得找一个model穿着衣服跳大神了。
通过SDK提供的函数打开MVN文件后,读取第i帧的姿态pose,其中包含了各个关节的相关运功数据,包括关节的旋转数据(四元数表示)、关节在世界坐标系中的位置、关节的加速度等。这里其实最常用的就是旋转数据和位置信息,关节的位置数据很好理解,就是每个节点在世界坐标系中的位置(XYZ),比较麻烦的是关节的旋转,这个玩意我搞了好几天,不断测试,后来终于想通了,我很欣慰,遂写此文,以做纪念!SDK文档上讲动捕记录的旋转数据是在世界坐标系下的,旋转数据使用四元数quat[4]表示,但是文档中没有仔细说明到底四元数的四个分量是如何对应的,即哪个是w,哪个是x、y、z,经过测试知道