diff options
Diffstat (limited to 'engine/src/core/com/jme3/animation/package.html')
-rw-r--r-- | engine/src/core/com/jme3/animation/package.html | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/engine/src/core/com/jme3/animation/package.html b/engine/src/core/com/jme3/animation/package.html new file mode 100644 index 0000000..554bab9 --- /dev/null +++ b/engine/src/core/com/jme3/animation/package.html @@ -0,0 +1,78 @@ +<!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> |