- 我的毕业设计计划做一个BVH文件解析和编辑软件。
从计算机编程角度看来,程序员喜欢将很多东西分开对待,从而简化,也就是分而治之。计算机动画肯定是复杂的,但是总有办法解决,于是动画被分为蒙皮&骨骼动作。BVH文件存放的就是骨骼的构成和动作数据。
BVH是在BVA格式的基础上的改进,在动作捕获后解析出来的,是一种通用的人体特征动画文件格式,广泛地被当今流行的各种动画制作软件(Poser,3DMax等)支持.它对人体的表达采用的就是上图的骨架模型,通过树结构来实现。
BVH文件中主要有两部分信息:
- 由关键字HIERARCHY标志开始的骨架构成,这部分包括一个ROOT根节点,多个JOINT节点,以及处于树叶子端的End Site节点。每个节点都包括OFFSET,CHANNEL信息。OFFSET关键字后面的3个数据表示的是该节点相对于父节点的偏移量,而对于ROOT没有父节点,其OFFSET表示整个树的平移量。CHANNEL信息是用来解析下面的动画数据用,但是必须注意的是:只有ROOT有6个通道数,其它节点有且只能有3个通道,这些通道只标志旋转信息。
- 以MOTION关键字标志开始的动作数据,后面是以Frames:标志帧数,Frame Time标记帧频。接下来就是令人眼花缭乱的数据了。但是这些数据有很强的规律可循:
- 帧数==数据的行数。换句话说,每一行的数据表示骨架各个分支在某帧中的姿势。
- 每行数据数==骨架所有节点的通道总和。因此可以根据通道来解析每一行的数据,做到按图索骥...
- 纵观各行,每一行数据的前三个元素为ROOT节点的平移量,剩余的数据全部是旋转信息。
最终动画的实现,就是一帧帧的解析,每一帧都的渲染都是先在世界坐标原点位置将该帧骨架的姿势绘制好,在平移到指定的position,总体一看,流畅的动画效果。