From 1fd93cf228ab2574b01a78eef968fe5f26a3fc68 Mon Sep 17 00:00:00 2001 From: "davedx@gmail.com" Date: Tue, 4 Jan 2011 17:41:56 +0000 Subject: [PATCH] [Changed] Added tagged joints. Will post blog explaining it --- .../badlogic/gdx/graphics/animation/Animator.java | 9 ++-- .../badlogic/gdx/graphics/keyframed/Keyframe.java | 6 +++ .../gdx/graphics/keyframed/KeyframeAnimator.java | 54 ++++++++++++++++++++ .../gdx/graphics/keyframed/KeyframedModel.java | 57 ++++++++++++++++++++++ 4 files changed, 122 insertions(+), 4 deletions(-) diff --git a/gdx/src/com/badlogic/gdx/graphics/animation/Animator.java b/gdx/src/com/badlogic/gdx/graphics/animation/Animator.java index 5c556719c..ac29151ed 100644 --- a/gdx/src/com/badlogic/gdx/graphics/animation/Animator.java +++ b/gdx/src/com/badlogic/gdx/graphics/animation/Animator.java @@ -40,12 +40,13 @@ public abstract class Animator { mCurrentAnim = anim; mAnimLoop = loop; + mAnimPos = mFrameDelta = 0.f; + mCurrentFrameIdx = -1; + mNextFrameIdx = -1; + if(mCurrentAnim != null) { mAnimLen = mCurrentAnim.getLength(); - mAnimPos = mFrameDelta = 0.f; - mCurrentFrameIdx = -1; - mNextFrameIdx = -1; } } @@ -106,7 +107,7 @@ public abstract class Animator { mFrameDelta = 0.f; mCurrentFrameIdx = currentFrameIdx; } - + mFrameDelta += dt; setInterpolationFrames(); diff --git a/gdx/src/com/badlogic/gdx/graphics/keyframed/Keyframe.java b/gdx/src/com/badlogic/gdx/graphics/keyframed/Keyframe.java index d68dbb1d5..9b46b315a 100644 --- a/gdx/src/com/badlogic/gdx/graphics/keyframed/Keyframe.java +++ b/gdx/src/com/badlogic/gdx/graphics/keyframed/Keyframe.java @@ -12,6 +12,9 @@ */ package com.badlogic.gdx.graphics.keyframed; +import com.badlogic.gdx.math.Quaternion; +import com.badlogic.gdx.math.Vector3; + /** * Container for the geometry of a single animation keyframe. * @@ -23,4 +26,7 @@ public class Keyframe { public short[][] Indices = null; public boolean IndicesSet = false; public boolean IndicesSent = false; + + public Vector3[] TaggedJointPos = null; + public Quaternion[] TaggedJoint = null; } diff --git a/gdx/src/com/badlogic/gdx/graphics/keyframed/KeyframeAnimator.java b/gdx/src/com/badlogic/gdx/graphics/keyframed/KeyframeAnimator.java index df5a623dd..df8cd2909 100644 --- a/gdx/src/com/badlogic/gdx/graphics/keyframed/KeyframeAnimator.java +++ b/gdx/src/com/badlogic/gdx/graphics/keyframed/KeyframeAnimator.java @@ -12,8 +12,12 @@ */ package com.badlogic.gdx.graphics.keyframed; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.animation.Animator; import com.badlogic.gdx.graphics.loaders.md5.MD5Animation; +import com.badlogic.gdx.graphics.loaders.md5.MD5Quaternion; +import com.badlogic.gdx.math.Quaternion; +import com.badlogic.gdx.math.Vector3; /** * An animation controller for keyframed animations. @@ -70,12 +74,31 @@ public class KeyframeAnimator extends Animator { R.Indices[idx] = new short[numIndices]; } + /** + * Set the number of tagged joints for allocation + * @param num + */ + public void setNumTaggedJoints(int num) + { + // allocate space for joint data in the result keyframe + R.TaggedJointPos = new Vector3[num]; + for(int i=0; i mTaggedJointNames = new ArrayList(); /** * Gets the {@link KeyframeAnimator} for this model. @@ -71,6 +77,16 @@ public class KeyframedModel { mMaterials[i] = mats[i]; } } + + /** + * Sets the tagged joints for this model's animations. Tagged joints have their data preserved post-sampling. + * @param joints + * An array of joint names. + */ + public void setTaggedJoints(ArrayList joints) + { + mTaggedJointNames = joints; + } //TODO: Split this out to an MD5toKeyframe loader in com.badlogic.gdx.graphics.loaders /** @@ -115,6 +131,11 @@ public class KeyframedModel { Keyframe k = new Keyframe(); k.Vertices = new float[mNumMeshes][]; k.Indices = new short[mNumMeshes][]; + if(mTaggedJointNames.size() > 0) + { + k.TaggedJointPos = new Vector3[mTaggedJointNames.size()]; + k.TaggedJoint = new Quaternion[mTaggedJointNames.size()]; + } for(int m=0; m