From cb0c88d70f291b215175f4db80f02d585d999337 Mon Sep 17 00:00:00 2001 From: Xoppa Date: Tue, 4 Jun 2013 00:15:34 +0200 Subject: [PATCH] Update tests to use AnimationController --- .../src/com/badlogic/gdx/tests/g3d/ModelTest.java | 75 ++++++++-------------- .../com/badlogic/gdx/tests/g3d/SkeletonTest.java | 61 +++++------------- 2 files changed, 44 insertions(+), 92 deletions(-) diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/ModelTest.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/ModelTest.java index ff1f434ce..29a049145 100644 --- a/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/ModelTest.java +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/ModelTest.java @@ -2,67 +2,49 @@ package com.badlogic.gdx.tests.g3d; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.g3d.Model; import com.badlogic.gdx.graphics.g3d.ModelBatch; import com.badlogic.gdx.graphics.g3d.ModelInstance; import com.badlogic.gdx.graphics.g3d.lights.DirectionalLight; import com.badlogic.gdx.graphics.g3d.lights.Lights; +import com.badlogic.gdx.graphics.g3d.lights.PointLight; +import com.badlogic.gdx.graphics.g3d.materials.BlendingAttribute; +import com.badlogic.gdx.graphics.g3d.materials.ColorAttribute; import com.badlogic.gdx.graphics.g3d.model.Animation; import com.badlogic.gdx.graphics.g3d.model.NodeAnimation; +import com.badlogic.gdx.graphics.g3d.shaders.DefaultShader; +import com.badlogic.gdx.graphics.g3d.utils.AnimationController; import com.badlogic.gdx.math.Quaternion; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.StringBuilder; public class ModelTest extends BaseG3dHudTest { Lights lights = new Lights(0.4f, 0.4f, 0.4f).add( - new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -1f, 0f) - //new PointLight().set(1f, 0f, 0f, 5f, 5f, 5f, 15f), - //new PointLight().set(0f, 0f, 1f, -5f, 5f, 5f, 15f), - //new PointLight().set(0f, 1f, 0f, 0f, 5f, -5f, 7f) - //new Light(0.5f, 0.5f, 0.5f, 1f), - //new Light(0.5f, 0.5f, 0.5f, 1f, -1f, -2f, -3f) + //new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -.8f, -.2f) + new PointLight().set(1f, 0f, 0f, 5f, 5f, 5f, 20f), + new PointLight().set(0f, 0f, 1f, -5f, 5f, 5f, 15f), + new PointLight().set(0f, 1f, 0f, 0f, 5f, -5f, 7f) ); + + ObjectMap animationControllers = new ObjectMap(); @Override public void create () { super.create(); showAxes = true; + //DefaultShader.defaultCullFace = 0; onModelClicked("g3d/teapot.g3db"); } private final static Vector3 tmpV = new Vector3(); private final static Quaternion tmpQ = new Quaternion(); - float counter; - String currentAsset; @Override protected void render (ModelBatch batch, Array instances) { - for (final ModelInstance instance : instances) { - if (instance.currentAnimation != null) { - instance.currentAnimTime = (instance.currentAnimTime + Gdx.graphics.getDeltaTime()) % instance.currentAnimation.duration; - for (final NodeAnimation nodeAnim : instance.currentAnimation.nodeAnimations) { - nodeAnim.node.isAnimated = true; - final int n = nodeAnim.keyframes.size - 1; - if (n == 0) { - nodeAnim.node.localTransform.idt(). - translate(nodeAnim.keyframes.get(0).translation). - rotate(nodeAnim.keyframes.get(0).rotation). - scl(nodeAnim.keyframes.get(0).scale); - } - for (int i = 0; i < n; i++) { - if (instance.currentAnimTime >= nodeAnim.keyframes.get(i).keytime && instance.currentAnimTime <= nodeAnim.keyframes.get(i+1).keytime) { - final float t = (instance.currentAnimTime - nodeAnim.keyframes.get(i).keytime) / (nodeAnim.keyframes.get(i+1).keytime - nodeAnim.keyframes.get(i).keytime); - nodeAnim.node.localTransform.idt(). - translate(tmpV.set(nodeAnim.keyframes.get(i).translation).lerp(nodeAnim.keyframes.get(i+1).translation, t)). - rotate(tmpQ.set(nodeAnim.keyframes.get(i).rotation).slerp(nodeAnim.keyframes.get(i+1).rotation, t)). - scl(tmpV.set(nodeAnim.keyframes.get(i).scale).lerp(nodeAnim.keyframes.get(i+1).scale, t)); - break; - } - } - } - instance.calculateTransforms(); - } - } + for (ObjectMap.Entry e : animationControllers.entries()) + e.value.update(Gdx.graphics.getDeltaTime()); batch.render(instances, lights); } @@ -95,31 +77,28 @@ public class ModelTest extends BaseG3dHudTest { return; instances.clear(); + animationControllers.clear(); final ModelInstance instance = new ModelInstance(assets.get(currentlyLoading, Model.class)); instances.add(instance); + if (instance.animations.size > 0) + animationControllers.put(instance, new AnimationController(instance)); currentlyLoading = null; } protected void switchAnimation() { - for (final ModelInstance instance : instances) { - if (instance.animations.size > 0) { - if (instance.currentAnimation != null) { - for (final NodeAnimation nodeAnim : instance.currentAnimation.nodeAnimations) - nodeAnim.node.isAnimated = false; - instance.calculateTransforms(); - } - int animIndex = -1; - for (int i = 0; i < instance.animations.size; i++) { - final Animation animation = instance.animations.get(i); - if (instance.currentAnimation == animation) { + for (ObjectMap.Entry e : animationControllers.entries()) { + int animIndex = 0; + if (e.value.current != null) { + for (int i = 0; i < e.key.animations.size; i++) { + final Animation animation = e.key.animations.get(i); + if (e.value.current.animation == animation) { animIndex = i; break; } } - animIndex = (animIndex + 1) % (instance.animations.size + 1); - instance.currentAnimation = animIndex == instance.animations.size ? null : instance.animations.get(animIndex); - instance.currentAnimTime = 0f; } + animIndex = (animIndex + 1) % e.key.animations.size; + e.value.animate(e.key.animations.get(animIndex).id, -1, 1f, null, 0.2f); } } diff --git a/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/SkeletonTest.java b/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/SkeletonTest.java index b7593308a..eae61a8c2 100644 --- a/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/SkeletonTest.java +++ b/tests/gdx-tests/src/com/badlogic/gdx/tests/g3d/SkeletonTest.java @@ -11,16 +11,19 @@ import com.badlogic.gdx.graphics.g3d.materials.BlendingAttribute; import com.badlogic.gdx.graphics.g3d.model.Animation; import com.badlogic.gdx.graphics.g3d.model.Node; import com.badlogic.gdx.graphics.g3d.model.NodeAnimation; +import com.badlogic.gdx.graphics.g3d.utils.AnimationController; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; import com.badlogic.gdx.math.Quaternion; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.ObjectMap; import com.badlogic.gdx.utils.Pool; import com.badlogic.gdx.utils.StringBuilder; public class SkeletonTest extends BaseG3dHudTest { ShapeRenderer shapeRenderer; + ObjectMap animationControllers = new ObjectMap(); @Override public void create () { @@ -41,10 +44,10 @@ public class SkeletonTest extends BaseG3dHudTest { private final static Quaternion tmpQ = new Quaternion(); @Override protected void render (ModelBatch batch, Array instances) { - for (final ModelInstance instance : instances) { - updateAnimation(instance); + for (ObjectMap.Entry e : animationControllers.entries()) + e.value.update(Gdx.graphics.getDeltaTime()); + for (final ModelInstance instance : instances) renderSkeleton(instance); - } batch.render(instances); } @@ -102,32 +105,29 @@ public class SkeletonTest extends BaseG3dHudTest { return; instances.clear(); + animationControllers.clear(); final ModelInstance instance = new ModelInstance(assets.get(currentlyLoading, Model.class)); instance.materials.get(0).set(new BlendingAttribute(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA, 0.5f)); instances.add(instance); + if (instance.animations.size > 0) + animationControllers.put(instance, new AnimationController(instance)); currentlyLoading = null; } protected void switchAnimation() { - for (final ModelInstance instance : instances) { - if (instance.animations.size > 0) { - if (instance.currentAnimation != null) { - for (final NodeAnimation nodeAnim : instance.currentAnimation.nodeAnimations) - nodeAnim.node.isAnimated = false; - instance.calculateTransforms(); - } - int animIndex = -1; - for (int i = 0; i < instance.animations.size; i++) { - final Animation animation = instance.animations.get(i); - if (instance.currentAnimation == animation) { + for (ObjectMap.Entry e : animationControllers.entries()) { + int animIndex = 0; + if (e.value.current != null) { + for (int i = 0; i < e.key.animations.size; i++) { + final Animation animation = e.key.animations.get(i); + if (e.value.current.animation == animation) { animIndex = i; break; } } - animIndex = (animIndex + 1) % (instance.animations.size + 1); - instance.currentAnimation = animIndex == instance.animations.size ? null : instance.animations.get(animIndex); - instance.currentAnimTime = 0f; } + animIndex = (animIndex + 1) % e.key.animations.size; + e.value.animate(e.key.animations.get(animIndex).id, -1, 1f, null, 0.2f); } } @@ -142,31 +142,4 @@ public class SkeletonTest extends BaseG3dHudTest { switchAnimation(); return super.keyUp(keycode); } - - public void updateAnimation(final ModelInstance instance) { - if (instance.currentAnimation != null) { - instance.currentAnimTime = (instance.currentAnimTime + Gdx.graphics.getDeltaTime()) % instance.currentAnimation.duration; - for (final NodeAnimation nodeAnim : instance.currentAnimation.nodeAnimations) { - nodeAnim.node.isAnimated = true; - final int n = nodeAnim.keyframes.size - 1; - if (n == 0) { - nodeAnim.node.localTransform.idt(). - translate(nodeAnim.keyframes.get(0).translation). - rotate(nodeAnim.keyframes.get(0).rotation). - scl(nodeAnim.keyframes.get(0).scale); - } - for (int i = 0; i < n; i++) { - if (instance.currentAnimTime >= nodeAnim.keyframes.get(i).keytime && instance.currentAnimTime <= nodeAnim.keyframes.get(i+1).keytime) { - final float t = (instance.currentAnimTime - nodeAnim.keyframes.get(i).keytime) / (nodeAnim.keyframes.get(i+1).keytime - nodeAnim.keyframes.get(i).keytime); - nodeAnim.node.localTransform.idt(). - translate(tmpV.set(nodeAnim.keyframes.get(i).translation).lerp(nodeAnim.keyframes.get(i+1).translation, t)). - rotate(tmpQ.set(nodeAnim.keyframes.get(i).rotation).slerp(nodeAnim.keyframes.get(i+1).rotation, t)). - scl(tmpV.set(nodeAnim.keyframes.get(i).scale).lerp(nodeAnim.keyframes.get(i+1).scale, t)); - break; - } - } - } - instance.calculateTransforms(); - } - } } -- 2.11.0