Android Open Source - min3d Animation Object3d






From Project

Back to project page min3d.

License

The source code is released under:

MIT License

If you think the Android project min3d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.min3d.lib.animation;
//from  w  w  w  . ja v a 2 s . c  o m
import com.min3d.lib.core.FacesBufferedList;
import com.min3d.lib.core.Object3d;
import com.min3d.lib.core.TextureList;
import com.min3d.lib.core.Vertices;

public class AnimationObject3d extends Object3d {
  private int numFrames;
  private KeyFrame[] frames;
  private int currentFrameIndex;
  private long startTime;
  private long currentTime;
  private boolean isPlaying;
  private float interpolation;
  private float fps = 70;
  private boolean updateVertices = true;  
  private String currentFrameName;
  private int loopStartIndex;
  private boolean loop = false;

  public AnimationObject3d(int $maxVertices, int $maxFaces, int $numFrames) {
    super($maxVertices, $maxFaces);
    this.numFrames = $numFrames;
    this.frames = new KeyFrame[numFrames];
    this.currentFrameIndex = 0;
    this.isPlaying = false;
    this.interpolation = 0;
    this._animationEnabled = true;
  }
  
  public AnimationObject3d(Vertices $vertices, FacesBufferedList $faces, TextureList $textures, KeyFrame[] $frames)
  {
    super($vertices, $faces, $textures);
    numFrames = $frames.length;
    frames = $frames;
  }

  public int getCurrentFrame() {
    return currentFrameIndex;
  }

  public void addFrame(KeyFrame frame) {
    frames[currentFrameIndex++] = frame;
  }

  public void setFrames(KeyFrame[] frames) {
    this.frames = frames;
  }

  public void play() {
    startTime = System.currentTimeMillis();
    isPlaying = true;
    currentFrameName = null;
    loop = false;
  }

  public void play(String name) {
    currentFrameIndex = 0;
    currentFrameName = name;

    for (int i = 0; i < numFrames; i++) {
      if (frames[i].getName().equals(name))
      {
        loopStartIndex = currentFrameIndex = i;
        break;
      }
    }

    startTime = System.currentTimeMillis();
    isPlaying = true;
  }
  
  public void play(String name, boolean loop) {
    this.loop = loop;
    play(name);
  }

  public void stop() {
    isPlaying = false;
    currentFrameIndex = 0;
  }

  public void pause() {
    isPlaying = false;
  }

  public void update() {
    if (!isPlaying || !updateVertices)
      return;
    currentTime = System.currentTimeMillis();
    KeyFrame currentFrame = frames[currentFrameIndex];
    KeyFrame nextFrame = frames[(currentFrameIndex + 1) % numFrames];
    
    if(currentFrameName != null && !currentFrameName.equals(currentFrame.getName()))
    {
      if(!loop)
        stop();
      else
        currentFrameIndex = loopStartIndex;
      return;
    }
    
    float[] currentVerts = currentFrame.getVertices();
    float[] nextVerts = nextFrame.getVertices();
    float[] currentNormals = currentFrame.getNormals();
    float[] nextNormals = nextFrame.getNormals();
    int numVerts = currentVerts.length;
    
    float[] interPolatedVerts = new float[numVerts];
    float[] interPolatedNormals = new float[numVerts];

    for (int i = 0; i < numVerts; i += 3) {
      interPolatedVerts[i] = currentVerts[i] + interpolation * (nextVerts[i] - currentVerts[i]);
      interPolatedVerts[i + 1] = currentVerts[i + 1] + interpolation * (nextVerts[i + 1] - currentVerts[i + 1]);
      interPolatedVerts[i + 2] = currentVerts[i + 2] + interpolation   * (nextVerts[i + 2] - currentVerts[i + 2]);
      interPolatedNormals[i] = currentNormals[i] + interpolation * (nextNormals[i] - currentNormals[i]);
      interPolatedNormals[i + 1] = currentNormals[i + 1] + interpolation * (nextNormals[i + 1] - currentNormals[i + 1]);
      interPolatedNormals[i + 2] = currentNormals[i + 2] + interpolation * (nextNormals[i + 2] - currentNormals[i + 2]);
    }

    interpolation += fps * (currentTime - startTime) / 1000;
    
    vertices().overwriteNormals(interPolatedNormals);
    vertices().overwriteVerts(interPolatedVerts);
  
    if (interpolation > 1) {
      interpolation = 0;
      currentFrameIndex++;

      if (currentFrameIndex >= numFrames)
        currentFrameIndex = 0;
    }
    
    startTime = System.currentTimeMillis();
  }

  public float getFps() {
    return fps;
  }

  public void setFps(float fps) {
    this.fps = fps;
  }
  
  public Object3d clone(boolean cloneData)
  {
    Vertices v = cloneData ? _vertices.clone() : _vertices;
    FacesBufferedList f = cloneData ? _faces.clone() : _faces;
    //KeyFrame[] fr = cloneData ? getClonedFrames() : frames;
    
    AnimationObject3d clone = new AnimationObject3d(v, f, _textures, frames);
    clone.position().x = position().x;
    clone.position().y = position().y;
    clone.position().z = position().z;
    clone.rotation().x = rotation().x;
    clone.rotation().y = rotation().y;
    clone.rotation().z = rotation().z;
    clone.scale().x = scale().x;
    clone.scale().y = scale().y;
    clone.scale().z = scale().z;
    clone.setFps(fps);
    clone.animationEnabled(animationEnabled());
    return clone;
  }
  
  public KeyFrame[] getClonedFrames()
  {
    int len = frames.length;
    KeyFrame[] cl = new KeyFrame[len];
    
    for(int i=0; i<len; i++)
    {
      cl[i] = frames[i].clone();
    }
    
    return cl;
  }

  public boolean getUpdateVertices() {
    return updateVertices;
  }

  public void setUpdateVertices(boolean updateVertices) {
    this.updateVertices = updateVertices;
  }
}




Java Source Code List

com.min3d.ApplicationTest.java
com.min3d.ExampleAccelerometer.java
com.min3d.ExampleAnimatedTexture.java
com.min3d.ExampleAnimatingVertices.java
com.min3d.ExampleAssigningTexturesDynamically.java
com.min3d.ExampleCamera.java
com.min3d.ExampleFog.java
com.min3d.ExampleFromScratch.java
com.min3d.ExampleInsideLayout.java
com.min3d.ExampleKeyframeAnimation.java
com.min3d.ExampleLightProperties.java
com.min3d.ExampleLoad3DSFile.java
com.min3d.ExampleLoadMD2File.java
com.min3d.ExampleLoadObjFileMultiple.java
com.min3d.ExampleLoadObjFile.java
com.min3d.ExampleMipMap.java
com.min3d.ExampleMostMinimal.java
com.min3d.ExampleMultiTexture.java
com.min3d.ExampleMultipleLights.java
com.min3d.ExampleRenderType.java
com.min3d.ExampleRotatingPlanets.java
com.min3d.ExampleSubsetOfFaces.java
com.min3d.ExampleTextureOffset.java
com.min3d.ExampleTextureWrap.java
com.min3d.ExampleTextures.java
com.min3d.ExampleTransparentGlSurface.java
com.min3d.ExampleVertexColors.java
com.min3d.ExampleVerticesVariations.java
com.min3d.ScratchActivity.java
com.min3d.SplashActivity.java
com.min3d.lib.AParser.java
com.min3d.lib.ApplicationTest.java
com.min3d.lib.IParser.java
com.min3d.lib.LittleEndianDataInputStream.java
com.min3d.lib.MD2Parser.java
com.min3d.lib.Max3DSParser.java
com.min3d.lib.Min3d.java
com.min3d.lib.ObjParser.java
com.min3d.lib.ParseObjectData.java
com.min3d.lib.ParseObjectFace.java
com.min3d.lib.Parser.java
com.min3d.lib.Shared.java
com.min3d.lib.Utils.java
com.min3d.lib.animation.AnimationObject3d.java
com.min3d.lib.animation.KeyFrame.java
com.min3d.lib.core.Color4BufferList.java
com.min3d.lib.core.FacesBufferedList.java
com.min3d.lib.core.ManagedLightList.java
com.min3d.lib.core.Number3dBufferList.java
com.min3d.lib.core.Object3dContainer.java
com.min3d.lib.core.Object3d.java
com.min3d.lib.core.RenderCaps.java
com.min3d.lib.core.RendererActivity.java
com.min3d.lib.core.Renderer.java
com.min3d.lib.core.Scene.java
com.min3d.lib.core.TextureList.java
com.min3d.lib.core.TextureManager.java
com.min3d.lib.core.UvBufferList.java
com.min3d.lib.core.Vertices.java
com.min3d.lib.interfaces.IDirtyManaged.java
com.min3d.lib.interfaces.IDirtyParent.java
com.min3d.lib.interfaces.IObject3dContainer.java
com.min3d.lib.interfaces.ISceneController.java
com.min3d.lib.objectPrimitives.Box.java
com.min3d.lib.objectPrimitives.HollowCylinder.java
com.min3d.lib.objectPrimitives.Rectangle.java
com.min3d.lib.objectPrimitives.SkyBox.java
com.min3d.lib.objectPrimitives.Sphere.java
com.min3d.lib.objectPrimitives.Torus.java
com.min3d.lib.vos.AbstractDirtyManaged.java
com.min3d.lib.vos.BooleanManaged.java
com.min3d.lib.vos.CameraVo.java
com.min3d.lib.vos.Color4Managed.java
com.min3d.lib.vos.Color4.java
com.min3d.lib.vos.Face.java
com.min3d.lib.vos.FloatManaged.java
com.min3d.lib.vos.FogType.java
com.min3d.lib.vos.FrustumManaged.java
com.min3d.lib.vos.LightType.java
com.min3d.lib.vos.Light.java
com.min3d.lib.vos.Number3dManaged.java
com.min3d.lib.vos.Number3d.java
com.min3d.lib.vos.RenderType.java
com.min3d.lib.vos.ShadeModelManaged.java
com.min3d.lib.vos.ShadeModel.java
com.min3d.lib.vos.TexEnvxVo.java
com.min3d.lib.vos.TextureVo.java
com.min3d.lib.vos.Uv.java
com.min3d.lib.vos.Vertex3d.java