jPCT - a 3d engine for Java > Support

How to import vertex animations

(1/2) > >>

As you know, Egon, I'm writing that JSON-serialized file format. Right now, I'm working on the vertex animations. I've stored the frames in a file. The current version of the method looks like the following. But the trouble now is that the only idea I have is to clone the only Mesh instance I have and distort it with a vertex controller. But that doesn't really seem right to me.

--- Code: ---     public static Object3D loadVertexAnimated(String fileName) {
        NoBonesImporter jImporter = new NoBonesImporter();
        ArrayList<ArrayList> objects = jImporter.getList(fileName);
ArrayList<NoBoneAnimation> importedAnimations = jImporter.getAnimations(fileName);
Object3D[] list = Object3D[objects.size()];
for (int i = 0; i < objects.size(); i++) {
     ArrayList<ArrayList> theObject = objects.get(i);
     ArrayList<ArrayList> importedVertices = theObject.get(0);
             ArrayList<ArrayList> importedUVs = theObject.get(1);
             ArrayList<ArrayList> importedFaces = theObject.get(2);
             float[] coordinates = makeCoordinates(importedVertices);
             float[] uvs = makeUVs(importedUVs);
             int[] indices = makeIndices(importedFaces);
     Object3D anObject = new Object3D(coordinates, uvs, indices,0);
     list[i] = anObject;


int numTriangles = importedVertices.size(), numFrames = importedAnimations.size();
for (i = 0; i < numFrames; i++) {
     int frame = i;
     Object3D anObject = list[i];
     Mesh aMesh = anObject.getMesh();
     NoBoneAnimation anAnimation = animations.get(i);
     String name =;
     int numFrames = anAnimation.frames.size();
     Animation animation = new Animation(numFrames);

     for (ArrayList<ArrayList> importedVertices: anAnimation.frames) {
// Create a new mesh with vertex controller?
SimpleVector[] vertices = SimpleVector[importedVertices.size()];
for (int j = 0; j < vertices.length; j++) {
      SimpleVector v = new SimpleVector(vert.get(0), vert.get(1), vert.get(2));
vertices[j] = v;
Object3D anObject = makeAnimated3D(pose, objectsBonesReferences.get(i), theObject);

--- End code ---

I'm not quite sure what you mean. You have a mesh and you want to save it in different versions with different vertex positions?

Yes, to be more precise, right now I'm getting the infamous "The sizes of the animations meshes don't match" message. And the difference is always 8. Build(), strip(), compress() and a host of other attemps haven't changed this.

8 sounds exactly like the bounding box vertices that are added automatically. Calling build() on every mesh should actually help. Where do you get the meshes from that you want save?

From the JSON file. I actually fill an array of SimpleVectors. The only way I could think to apply them to a mesh is to call Object3D.cloneMesh(false), then to use a vertex controller to change the mesh's vertices. I must be doing something wrong because no animation runs (won't work with or without toControl.setVertexController(this, true)):

--- Code: ---public VertexController(Mesh toControl, SimpleVector[] newVertices) {
        super.init(toControl, true);
        toControl.setVertexController(this, true);
        SimpleVector[] vertices = super.getDestinationMesh();
        for (int i = 0; i < vertices.length; i++) {
            vertices[i].x = newVertices[i].x;
            vertices[i].y = newVertices[i].y;
            vertices[i].z = newVertices[i].z;
--- End code ---


[0] Message Index

[#] Next page

Go to full version