<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>

The <code>com.jme3.animation</code> package contains various classes
for managing animation inside a jME3 application. Currently, the majority
of classes are for handling skeletal animation. The primary control class is
the {@link com.jme3.animation.AnimControl}, through which animations can be played,
looped, combined, transitioned, etc.

<h3>Usage</h3>

<p>
<code>
// Create or load a model with skeletal animation:<br>
Spatial model = assetManager.loadModel("...");<br>
<br>
// Retrieve the AnimControl.<br>
AnimControl animCtrl = model.getControl(AnimControl.class);<br>
<br>
// Create an animation channel, by default assigned to all bones.<br>
AnimChannel animChan = animCtrl.createChannel();<br>
<br>
// Play an animation<br>
animChan.setAnim("MyAnim");<br>
</code>
<br>
<h3>Skeletal Animation System</h3>
<br>
<p>
jME3 uses a system of bone-weights: A vertex is assigned up to 4 bones by which
it is influenced and 4 weights that describe how much the bone influences the
vertex. The maximum weight value being 1.0, and the requirement that all 4 weights
for a given vertex <em>must</em> sum to 1.0. This data is specified
for each skin/mesh that is influenced by the animation control via the
{link com.jme3.scene.VertexBuffer}s <code>BoneWeight</code> and <code>BoneIndex</code>.
The BoneIndex buffer must be of the format <code>UnsignedByte</code>, thus
placing the limit of up to 256 bones for a skeleton. The BoneWeight buffer
should be of the format <code>Float</code>. Both buffers should reference 4
bones, even if the maximum number of bones any vertex is influenced is less or more
than 4.<br>
If a vertex is influenced by less than 4 bones, the indices following the last
valid bone should be 0 and the weights following the last valid bone should be 0.0.
The buffers are designed in such a way so as to permit hardware skinning.<br>
<p>
The {@link com.jme3.animation.Skeleton} class describes a bone heirarchy with one
or more root bones having children, thus containing all bones of the skeleton.
In addition to accessing the bones in the skeleton via the tree heirarchy, it
is also possible to access bones via index. The index for any given bone is
arbitrary and does not depend on the bone's location in the tree hierarchy.
It is this index that is specified in the BoneIndex VertexBuffer mentioned above
, and is also used to apply transformations to the bones through the animations.<br>
<p>
Every bone has a local and model space transformation. The local space
transformation is relative to its parent, if it has one, otherwise it is relative
to the model. The model space transformation is relative to model space.
The bones additionally have a bind pose transformation, which describes
the transformations for bones when no animated pose is applied to the skeleton.
All bones <em>must</em> have a bind pose transformation before they can be
animated. To set the bind pose for the skeleton, set the local (relative
to parent) transformations for all the bones using the call
{@link com.jme3.animation.Bone#setBindTransforms(com.jme3.math.Vector3f, com.jme3.math.Quaternion) }.
Then call {@link com.jme3.animation.Skeleton#updateWorldVectors() } followed by
{@link com.jme3.animation.Skeleton#setBindingPose() }. <br>
<p>
Animations are stored in a HashMap object, accessed by name. An animation
is simply a list of tracks, each track describes a timeline with each keyframe
having a transformation. For bone animations, every track is assigned to a bone,
while for morph animations, every track is assigned to a mesh.<br>
<p>

</body>
</html>
