关于BVH文件需要做一些说明,BVH是以欧拉角表示人体关节的旋转的。既然是旋转,必须要有一个初始骨架,根据它进行关节旋转,这也称为Tpose。Tpose可以通过BVH文件的OFFSET部分确定的,需要强调的是,每个关节都有自己的局部坐标系且在Tpose中,所有关节的局部坐标系的朝向一致,与世界坐标系的朝向也是一致的。那么,Tpose的根关节的OFFSET通常是(0.00,0.00,0.00)表示根关节沿着世界坐标系的X轴、Y轴和Z轴的平移量,根关节和世界坐标系是重合的(不但朝向一致,原点位置也是一致的)。Tpose的其他关节(非根关节)的OFFSET表示该关节的局部坐标系的原点相对于父关节的坐标系的原点的偏移(也可以这么说:该关节在父关节所在局部坐标系的位置)。
Tpose确定后,怎么表示所有关节的旋转呢?
根据CHANNELS,通过数据部分对应的channels值表示每个关节的旋转。每一帧表示一个pose,每一帧都是相对于Tpose旋转的。所以只需要理解第一帧怎么旋转,其他帧都是一样的道理。根关节有6个channels,前3个表示新帧的根关节坐标系原点相对于Tpose的根关节的坐标系的原点沿着X轴、Y轴和Z轴的偏移(也可以这么说:新帧的根关节相对于Tpose移动的位置)。后3个channels表示将根关节所在局部坐标系按照顺序(顺序是指定的)旋转,然后计算子关节在父关节旋转后的坐标系中的新位置,这也是子关节旋转后的位置。在此强调最重要的一点,当前关节的局部坐标系旋转是不会影响自己的,只会影响子关节位置的计算。