Package mri.v3ds

Examples of mri.v3ds.Mesh3ds


      }


      ///////// Go through all MESHES //////////////////////////
      for( int i=0; i<scene.meshes(); i++ ) {
        Mesh3ds m = scene.mesh( i );
       
        if (debug){
          int texMapType = m.texMapType();
          logger.debug("Texture coordinates provided: " + m.texCoords());
          logger.debug("Texture mapping type: " + texMapType);
          logger.debug("Mesh:" + m.name() + " Pivot:" + m.pivot());
        }
       
        /*
        XYZTrack3ds pos     = m.positionTrack();
        RotationTrack3ds rot   = m.rotationTrack();
        XYZTrack3ds sc       = m.scaleTrack();
        //FIXME .track and key(i) werden nicht zur verf�gung gestellt?!? aber in javadoc
        */
       
        if (debug){
          logger.debug("->Processing mesh: "   + i + " of " + scene.meshes() + " Name: \"" + m.name() + "\"");
          logger.debug("  Num Faces: "       + m.faces());
          logger.debug("  Num Vertices: "     + m.vertices());
          logger.debug("  Num TextureCoordinates: " + m.texCoords());
          logger.debug("");
        }
       
        //Create the arrays needed for the cruncher
        Vertex[] vertices     = new Vertex[m.vertices()];
        int[] indices       = new int[m.faces()*3];
       
        int[] texCoordIndices   = new int[m.faces()*3];
        float[][] textureCoords = new float[m.texCoords()][2];
       
        //Fill Vertices array
        for (int j = 0; j < m.vertices(); j++) {
          Vertex3ds vert = m.vertex(j);
         
          if (this.flipY){
            vertices[j] = new Vertex(vert.X, -vert.Y, vert.Z, -1,-1);
          }else{
            vertices[j] = new Vertex(vert.X, vert.Y, vert.Z, -1,-1);
          }
         
          if (m.texCoords()> j)
            textureCoords[j] = new float[]{m.texCoord(j).U, m.texCoord(j).V };
        }
       
        //Fill texcoords array
        for (int j = 0; j < m.texCoords(); j++) {
          TexCoord3ds tex =  m.texCoord(j);
         
          float[] texCoord = new float[2];
          texCoord[0] = tex.U;
          texCoord[1] = tex.V;
         
          textureCoords[j] = texCoord;
        }
       
        //TODO so werden gleiche materials in verschiedenen meshes nicht zu einem mesh gemacht!
        //also m�sste also ohne clear machen und daf�r vertices + texcoords in einen grossen
        //array, daf�r m�ssten indices aber per offset angepasst werden dass die wieder stimmen!
        materialIdToGroup.clear();
       
        if (m.faceMats() > 0){
          //List face Materials  //TODO USE LOGGERS!!
          logger.debug("  Num Face-Materials: " + m.faceMats() );
          for( int n = 0; n < m.faceMats(); n++ ){
            FaceMat3ds fmat = m.faceMat( n );
            logger.debug("    FaceMat ID: "     + fmat.matIndex() );
            logger.debug("    FaceMat indices: "   + fmat.faceIndexes());
           
            int[] faceIndicesForMaterial = fmat.faceIndex();
            if (faceIndicesForMaterial.length <= 0){
              continue;
            }

            //Check if there already is a group with the same material
            Group group = materialIdToGroup.get(fmat.matIndex());

            //If not, create a new group and save it in map
            if (group == null){
              group = new Group(new Integer(fmat.matIndex()).toString());
              materialIdToGroup.put(fmat.matIndex(), group);
            }

            //Go through all pointers to the faces for this material
            //and get the corresponding face
            for (int j = 0; j < faceIndicesForMaterial.length; j++) {
              int k = faceIndicesForMaterial[j];
              Face3ds face = m.face(k);

              AFace aFace = new AFace();
              aFace.p0 = face.P0;
              aFace.p1 = face.P1;
              aFace.p2 = face.P2;

              aFace.t0 = face.P0;
              aFace.t1 = face.P1;
              aFace.t2 = face.P2;

              group.addFace(aFace);
            }
          }

          Iterator<Integer> it = materialIdToGroup.keySet().iterator();
          logger.debug("Mesh: " + m.name() + " Anzahl Groups:" + materialIdToGroup.keySet().size());
          while (it.hasNext()) {
            int currentGroupName =  it.next();
            Group currentGroup = materialIdToGroup.get(currentGroupName);
            logger.debug("Current group: " + currentGroupName);

            currentGroup.compileItsOwnLists(vertices, textureCoords);

            //Get the new arrays
            Vertex[] newVertices     = currentGroup.getGroupVertices();
            int[] newIndices       = currentGroup.getIndexArray();
            float[][] newTextureCoords  = currentGroup.getGroupTexCoords();
            int[] newTexIndices     = currentGroup.getTexCoordIndices();

            logger.debug("\nGroup: \"" + currentGroup.name + "\" ->Vertices: " + currentGroup.verticesForGroup.size()+ " ->TextureCoords: " + currentGroup.texCoordsForGroup.size() + " ->Indices: " + currentGroup.indexArray.length + " ->Texcoord Indices: " + currentGroup.texCoordIndexArray.length );
            logger.debug("");

            if (vertices.length > 2){
              GeometryInfo geometry  = null;
              //Load as all vertex normals smoothed if creaseAngle == 180;
              if (creaseAngle == 180){
                geometry = normalGenerator.generateSmoothNormals(pa, newVertices , newIndices, newTextureCoords, newTexIndices, creaseAngle, flipTextureY, flipTextureX);
              }else{
                geometry = normalGenerator.generateCreaseAngleNormals(pa, newVertices, newIndices, newTextureCoords, newTexIndices, creaseAngle, flipTextureY, flipTextureX);
              }

              MTTriangleMesh mesh = new MTTriangleMesh(pa, geometry);

              if (mesh != null){
                mesh.setName(m.name() + " material: " + new Integer(currentGroupName).toString());
                //Assign texture
                this.assignMaterial(pathToModel, file, scene, m, currentGroupName, mesh);

                if (mesh.getTexture() != null){
                  mesh.setTextureEnabled(true);
                }else{
                  logger.debug("No texture could be assigned to mesh.");
                }
                returnMeshList.add(mesh);
              }
            }
          }
        }else{
          //If there are no materials for this mesh dont split mesh into
          //groups by material
          //Fill indices array and texcoords array (Here: vertex index = texcoord index)
          for( int faceIndex = 0; faceIndex < m.faces(); faceIndex++ ){
            Face3ds f = m.face( faceIndex );

            indices[faceIndex*3]   = f.P0;
            indices[faceIndex*3+1]   = f.P1;
            indices[faceIndex*3+2]   = f.P2;

            texCoordIndices[faceIndex*3]   = f.P0;
            texCoordIndices[faceIndex*3+1]   = f.P1;
            texCoordIndices[faceIndex*3+2]   = f.P2;
          }//for faces

          //Create the Mesh and set a texture
          if (vertices.length > 2){
            //Create normals for the mesh and duplicate vertices for faces that share the same
            //Vertex, but with different texture coordinates or different normals
            GeometryInfo geometry = null;
            //Generate normals and denormalize vertices with more than 1 texture coordinate
            if (creaseAngle == 180){
              geometry = normalGenerator.generateSmoothNormals(pa, vertices, indices, textureCoords, texCoordIndices, creaseAngle, flipTextureY, flipTextureX);
            }else{
              geometry = normalGenerator.generateCreaseAngleNormals(pa, vertices, indices, textureCoords, texCoordIndices, creaseAngle, flipTextureY, flipTextureX);
            }
            MTTriangleMesh mesh = new MTTriangleMesh(pa, geometry);
            mesh.setName(m.name());
//            this.assignMaterial(file, scene, m, sceneMaterialID, mesh);
            returnMeshList.add(mesh);
          }//end if vertices.lentgh > 2
        }
      }//for meshes
View Full Code Here

TOP

Related Classes of mri.v3ds.Mesh3ds

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.