使用bvh数据实现OGRE骨骼动画

忙活了一段时间,终于在数据资料驴唇不对马嘴,导出插件严重不靠谱,参考资料不仅数量少而且质量也不高的基础上,完成了读取动作捕捉设备获取的bvh数据并驱动Maya导出模型,最终在OGRE中实现了骨骼动画。

表面看起来实现OGRE骨骼动画很简单,就是将bvh中各关节的数据赋给OGRE骨骼动画。实际实现的时候会发现有很多细节的问题需要注意,如bvh关节怎样和模型的关节对应起来,如果bvh有22个关节,而模型有18个关节或25个关节咋办?bvh中各个关节具有统一的坐标系,运动数据(MOTION部分)中每个关节数据都是相对于关节的初始位置给出的,除根关节外每个关节都是相对于父关节的旋转,而导入OGRE的模型每个关节的坐标系都可能不一样(即使在Maya中一样,通过插件导出后也可能不一样),关节的旋转是相对于上一帧的位置,且默认绕自身旋转。这些糅合在一起,还是挺让人头大的,尤其是对于第一次接触骨骼动画的人来说。

在介绍我的实现之前,先说下我找到的相对来说比较靠谱的参考资料吧:

(1)《基于BVH驱动的OGRE骨骼动画》,这篇文章介绍了基本的实现思路,个人觉得看看了解下两种文件的格式就行了。如果他介绍的实现过程你信了,就会和我一样痛苦不堪,对自己的智商产生严重怀疑。这也许是国内文章的一个通病吧,只有漂亮的结果,但不知道他是咋实现的,甚至连实现了没有都是一个大大的问号。不像国外的一些大牛,文章的最后会附上实现代码的链接。有源代码才有真相啊!(当然我也是国人,也不放源码了大笑相信有我真正实现的思路,大家能比较轻松的实现,如果实在有问题,可向我索取源码)。

(2)BVH Motion File Player,这是一个日本人用OpenGL和GLUT实现的读取BVH数据并显示骨架的程序,相当短小精悍。不像有的程序洋洋洒洒一大坨,十几个文件,看的头都大了。这个只有三个文件,而且跟其他程序比起来毫不逊色。我非常喜欢他简洁的代码,并采用了他读取BVH的数据的部分。

(3)Motion Capture File Formats Explained,这个文件介绍了BVH等一些常见动作捕捉数据的格式,通过分析其中的两个文件的不同,我真正理解了BVH的数据结构及每个数据所代表的含义。

我的实现步骤如下:(1)Maya中使用骨骼生成插件绑定模型;(2)使用Ogre Exporter插件将模型导出为Ogre可读的mesh模型文件和skeleton骨骼文件;(3)匹配模型与BVH数据;(4)读取BVH数据并驱动模型运动。

截图如下:

使用bvh数据实现OGRE骨骼动画_第1张图片


Motion Capture File Formats Explained

你可能感兴趣的:(数据结构,File)