• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package jme3test.model.anim;
2 
3 import com.jme3.animation.AnimControl;
4 import com.jme3.animation.Animation;
5 import com.jme3.animation.SpatialTrack;
6 import com.jme3.app.SimpleApplication;
7 import com.jme3.light.AmbientLight;
8 import com.jme3.light.DirectionalLight;
9 import com.jme3.math.Quaternion;
10 import com.jme3.math.Vector3f;
11 import com.jme3.scene.Geometry;
12 import com.jme3.scene.Node;
13 import com.jme3.scene.shape.Box;
14 import java.util.HashMap;
15 
16 public class TestSpatialAnim extends SimpleApplication {
17 
main(String[] args)18     public static void main(String[] args) {
19     	TestSpatialAnim app = new TestSpatialAnim();
20         app.start();
21     }
22 
23     @Override
simpleInitApp()24     public void simpleInitApp() {
25 
26         AmbientLight al = new AmbientLight();
27         rootNode.addLight(al);
28 
29         DirectionalLight dl = new DirectionalLight();
30         dl.setDirection(Vector3f.UNIT_XYZ.negate());
31         rootNode.addLight(dl);
32 
33         // Create model
34         Box box = new Box(1, 1, 1);
35         Geometry geom = new Geometry("box", box);
36         geom.setMaterial(assetManager.loadMaterial("Textures/Terrain/BrickWall/BrickWall.j3m"));
37         Node model = new Node("model");
38         model.attachChild(geom);
39 
40         Box child = new Box(0.5f, 0.5f, 0.5f);
41         Geometry childGeom = new Geometry("box", child);
42         childGeom.setMaterial(assetManager.loadMaterial("Textures/Terrain/BrickWall/BrickWall.j3m"));
43         Node childModel = new Node("childmodel");
44         childModel.setLocalTranslation(2, 2, 2);
45         childModel.attachChild(childGeom);
46         model.attachChild(childModel);
47 
48         //animation parameters
49         float animTime = 5;
50         int fps = 25;
51         float totalXLength = 10;
52 
53         //calculating frames
54         int totalFrames = (int) (fps * animTime);
55         float dT = animTime / totalFrames, t = 0;
56         float dX = totalXLength / totalFrames, x = 0;
57         float[] times = new float[totalFrames];
58         Vector3f[] translations = new Vector3f[totalFrames];
59         Quaternion[] rotations = new Quaternion[totalFrames];
60         Vector3f[] scales = new Vector3f[totalFrames];
61 		for (int i = 0; i < totalFrames; ++i) {
62         	times[i] = t;
63         	t += dT;
64         	translations[i] = new Vector3f(x, 0, 0);
65         	x += dX;
66         	rotations[i] = Quaternion.IDENTITY;
67         	scales[i] = Vector3f.UNIT_XYZ;
68         }
69         SpatialTrack spatialTrack = new SpatialTrack(times, translations, rotations, scales);
70 
71         //creating the animation
72         Animation spatialAnimation = new Animation("anim", animTime);
73         spatialAnimation.setTracks(new SpatialTrack[] { spatialTrack });
74 
75         //create spatial animation control
76         AnimControl control = new AnimControl();
77         HashMap<String, Animation> animations = new HashMap<String, Animation>();
78         animations.put("anim", spatialAnimation);
79         control.setAnimations(animations);
80         model.addControl(control);
81 
82         rootNode.attachChild(model);
83 
84         //run animation
85         control.createChannel().setAnim("anim");
86     }
87 }
88