|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
|
|
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
|
|
|
|
<html> |
|
|
|
|
|
|
|
|
|
<head> |
|
|
|
@ -17,21 +17,21 @@ looped, combined, transitioned, etc. |
|
|
|
|
|
|
|
|
|
<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/> |
|
|
|
|
// 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/> |
|
|
|
|
<br> |
|
|
|
|
<h3>Skeletal Animation System</h3> |
|
|
|
|
<br/> |
|
|
|
|
<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 |
|
|
|
@ -43,10 +43,10 @@ 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/> |
|
|
|
|
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/> |
|
|
|
|
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. |
|
|
|
@ -54,7 +54,7 @@ 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/> |
|
|
|
|
, 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 |
|
|
|
@ -66,12 +66,12 @@ 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/> |
|
|
|
|
{@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/> |
|
|
|
|
while for morph animations, every track is assigned to a mesh.<br> |
|
|
|
|
<p> |
|
|
|
|
|
|
|
|
|
</body> |
|
|
|
|