You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
3.1 KiB
87 lines
3.1 KiB
package jme3test.model.anim;
|
|
|
|
import com.jme3.animation.AnimControl;
|
|
import com.jme3.animation.Animation;
|
|
import com.jme3.animation.SpatialTrack;
|
|
import com.jme3.app.SimpleApplication;
|
|
import com.jme3.light.AmbientLight;
|
|
import com.jme3.light.DirectionalLight;
|
|
import com.jme3.math.Quaternion;
|
|
import com.jme3.math.Vector3f;
|
|
import com.jme3.scene.Geometry;
|
|
import com.jme3.scene.Node;
|
|
import com.jme3.scene.shape.Box;
|
|
import java.util.HashMap;
|
|
|
|
public class TestSpatialAnim extends SimpleApplication {
|
|
|
|
public static void main(String[] args) {
|
|
TestSpatialAnim app = new TestSpatialAnim();
|
|
app.start();
|
|
}
|
|
|
|
@Override
|
|
public void simpleInitApp() {
|
|
|
|
AmbientLight al = new AmbientLight();
|
|
rootNode.addLight(al);
|
|
|
|
DirectionalLight dl = new DirectionalLight();
|
|
dl.setDirection(Vector3f.UNIT_XYZ.negate());
|
|
rootNode.addLight(dl);
|
|
|
|
// Create model
|
|
Box box = new Box(1, 1, 1);
|
|
Geometry geom = new Geometry("box", box);
|
|
geom.setMaterial(assetManager.loadMaterial("Textures/Terrain/BrickWall/BrickWall.j3m"));
|
|
Node model = new Node("model");
|
|
model.attachChild(geom);
|
|
|
|
Box child = new Box(0.5f, 0.5f, 0.5f);
|
|
Geometry childGeom = new Geometry("box", child);
|
|
childGeom.setMaterial(assetManager.loadMaterial("Textures/Terrain/BrickWall/BrickWall.j3m"));
|
|
Node childModel = new Node("childmodel");
|
|
childModel.setLocalTranslation(2, 2, 2);
|
|
childModel.attachChild(childGeom);
|
|
model.attachChild(childModel);
|
|
|
|
//animation parameters
|
|
float animTime = 5;
|
|
int fps = 25;
|
|
float totalXLength = 10;
|
|
|
|
//calculating frames
|
|
int totalFrames = (int) (fps * animTime);
|
|
float dT = animTime / totalFrames, t = 0;
|
|
float dX = totalXLength / totalFrames, x = 0;
|
|
float[] times = new float[totalFrames];
|
|
Vector3f[] translations = new Vector3f[totalFrames];
|
|
Quaternion[] rotations = new Quaternion[totalFrames];
|
|
Vector3f[] scales = new Vector3f[totalFrames];
|
|
for (int i = 0; i < totalFrames; ++i) {
|
|
times[i] = t;
|
|
t += dT;
|
|
translations[i] = new Vector3f(x, 0, 0);
|
|
x += dX;
|
|
rotations[i] = Quaternion.IDENTITY;
|
|
scales[i] = Vector3f.UNIT_XYZ;
|
|
}
|
|
SpatialTrack spatialTrack = new SpatialTrack(times, translations, rotations, scales);
|
|
|
|
//creating the animation
|
|
Animation spatialAnimation = new Animation("anim", animTime);
|
|
spatialAnimation.setTracks(new SpatialTrack[] { spatialTrack });
|
|
|
|
//create spatial animation control
|
|
AnimControl control = new AnimControl();
|
|
HashMap<String, Animation> animations = new HashMap<String, Animation>();
|
|
animations.put("anim", spatialAnimation);
|
|
control.setAnimations(animations);
|
|
model.addControl(control);
|
|
|
|
rootNode.attachChild(model);
|
|
|
|
//run animation
|
|
control.createChannel().setAnim("anim");
|
|
}
|
|
}
|
|
|