现在的位置: 首页 > 综合 > 正文

OGRE骨骼动画的读取和播放

2018年02月09日 ⁄ 综合 ⁄ 共 1055字 ⁄ 字号 评论关闭

OGRE 本身附带了两套比较完整的骨骼动画模型,保存在 OGRE\Samples\Media\models 目录下,一套是机器人 ( robot.mesh 和 robot.skeleton ) ,一套是忍者 ( ninja.mesh 和 ninja.skeleton ) 。其中忍者的模型多边形数比较高,动作也比较丰富和细腻。我们就使用这个现成的忍者模型来学习骨骼动画的读取和播放。OGRE 的角色模型和骨骼动画是分开为两个不同格式的文件,一个是 *.mesh 文件,在这个文件中,定义了角色的皮肤 (Skin)
模型、角色的材质名称 、以及角色对应的 *.skeleton 骨骼动画文件名;  在 *.skeleton 文件中,则定义了角色的骨骼 (Bones) 信息和骨骼动画序列,一个 *.skeleton 文件中至少包含一个骨骼定义部分和若干个骨骼动画序列,在 ninja.skeleton 文件中就包含了 Walk 、 Jump 、 Attack1 、 Idle2 等多个动画序列的定义。至于如何知道 *.mesh 文件使用的材质名称和骨骼动画文件名,以及如何知道 *.skeleton 文件中定义了哪些动画序列,可以使用
OgreXMLConverter.exe 。这个工具在编译后的 ogrenew\Tools\XMLConverter\bin\release 目录下。

骨骼动画的等级和种类比较多,并不是所有的引擎和模型制作工具都可以支持。OGRE支持下列特征的骨骼动画:

  • 1 每个网格可以定义一个独立骨骼动画。
  • 2 每个骨骼动画可以支持无限的骨骼。
  • 3 作用于骨骼上的反向动力。
  • 4 每个骨骼集可以定义多个名称的动画。
  • 5 每个骨骼动画可以有多个关键帧。
  • 6 关键帧之间的线性或者是样条插值。
  • 7 一个顶点可以关联多个骨骼,并且可以被赋予权重,用来做融合。
  • 8 通过权值融合,多个动画可以在同一时刻被作用于一个网格数据。

  骨骼和动画信息被保存在以.skeleton结尾的文件中,可以通过OGRE的exporters导出。当创建一个基于某个mesh的实体的时间,如果mesh上有动画信息,那么相应的.skeleton文件会被自动加载。之后就可以根据8.2节介绍的动画状态来操作实体了。骨骼动画可以用软件实现,也可以用shaders(硬件蒙皮)实现。总体来说,第二种方式比较好,因为这将以部分cpu的工作交给了gpu,并且顶点数据不需要每帧都去更新。对大型的,细节非常多的模型非常有用。通过指定带有顶点program的材质脚本可以实现硬件蒙皮。更多的信息可以参考顶点program实现硬件蒙皮。骨骼动画可以和顶点动画相结合。

抱歉!评论已关闭.