2.9 Skeletal Animation
2.9 Skeletal Animation
2.9 Skeletal Animation
9 Skeletal Animation
Skeletal animation is a process of animating a mesh by moving a set of hierarchical bones within
the mesh, which in turn moves the vertices of the model according to the bone assignments stored
in each vertex. An alternative term for this approach is 'skinning'. The usual way of creating these
animations is with a modelling tool such as Milkshape 3D, Blender, 3D Studio or Maya. OGRE
provides exporters to allow you to get the data out of these modellers and into the engine See
section 4.1 Exporters.
There are many grades of skeletal animation, and not all engines (or modellers for that matter)
support all of them. OGRE supports the following features:
有很多种的骨骼动画,并且不是所有引擎(或是建模工具)都支持他们。OGRE 支持以下的
特点:
Each mesh can be linked to a single skeleton
每个骨骼都是不受限的骨头
骨头间是分等级的前项运动
Multiple named animations per skeleton (e.g. 'Walk', 'Run', 'Jump', 'Shoot' etc)
每个骨骼可以是多名称动画
每个动画没有限制关键帧的数量
线性或基于样条的关键帧插值
A vertex can be assigned to multiple bones and assigned weightings for smoother
skinning
一个顶点被赋值到多块骨头上同时也赋值到平滑的皮肤上
Multiple animations can be applied to a mesh at the same time, again with a blend
weighting
Skeletons and the animations which go with them are held in .skeleton files, which are produced
by the OGRE exporters. These files are loaded automatically when you create an Entity based on a
Mesh which is linked to the skeleton in question. The entity is then given an 'animation state'
object per animation on the skeleton to allow you to specify the animation state of that single
entity (you can animate multiple entities using the same skeleton, OGRE sorts the reuse out
internally).
You can retrieve a pointer to the AnimationState object by calling Entity::getAnimationState. You
can then call methods on this returned object to update the animation, probably in the frameStarted
event. AnimationState has a very simple method 'addTime' which allows you to alter the
animation position incrementally, and it will automatically loop for you. addTime can take
positive or negative values (so you can reverse the animation if you want).