Skip to content
Snippets Groups Projects
Commit 4549b607 authored by Marek Bařinka's avatar Marek Bařinka
Browse files

Create MeshObjLoader.java

First not finished and not tested version.
parent 7e8da1d3
No related branches found
No related tags found
No related merge requests found
package cz.fidentis.analyst.mesh.io;
import com.mokiat.data.front.parser.IOBJParser;
import com.mokiat.data.front.parser.OBJDataReference;
import com.mokiat.data.front.parser.OBJFace;
import com.mokiat.data.front.parser.OBJMesh;
import com.mokiat.data.front.parser.OBJModel;
import com.mokiat.data.front.parser.OBJNormal;
import com.mokiat.data.front.parser.OBJObject;
import com.mokiat.data.front.parser.OBJParser;
import com.mokiat.data.front.parser.OBJTexCoord;
import com.mokiat.data.front.parser.OBJVertex;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.vecmath.Vector3d;
/**
*
* Expects only one face in one file stored as one object.
* @author Marek Bařinka
*/
public class MeshObjLoader {
public static MeshModel read(InputStream is) {
MeshModel meshModel = new MeshModel();
try {
final IOBJParser parser = new OBJParser();
final OBJModel model = parser.parse(is);
if (model.getObjects().isEmpty()) {
return null;
}
OBJObject object = model.getObjects().get(0); // Předpokládá se celý obličej jako jeden prvek
List<MeshFacet> listFacet = new ArrayList();
for (OBJMesh mesh : object.getMeshes()) { // Sjednotit s facet
MeshFacet meshFacet = new MeshFacet();
for (OBJFace face : mesh.getFaces()) {
List<OBJDataReference> references = face.getReferences();
List<MeshPoint> points = new ArrayList();
for (OBJDataReference reference : references) {
final OBJVertex vertex = model.getVertex(reference);
Vector3d coords = new Vector3d(vertex.x, vertex.y, vertex.z);
Vector3d norm = null;
Vector3d texCoords = null;
if (reference.hasNormalIndex()) {
final OBJNormal normal = model.getNormal(reference);
norm = new Vector3d(normal.x, normal.y, normal.z);
}
if (reference.hasTexCoordIndex()) {
final OBJTexCoord texCoord = model.getTexCoord(reference);
texCoords = new Vector3d(texCoord.u, texCoord.v, texCoord.w);
}
MeshPoint meshPoint = new MeshPoint(coords, norm, texCoords);
points.add(meshPoint);
}
List<MeshEdge> edges = new ArrayList();
for (int i = 1; i < points.size(); i++) {
edges.add(new MeshEdge(points.get(i-1), points.get(i)));
}
}
listFacet.add(meshFacet);
}
meshModel.addFacets(listFacet);
} catch (IOException ex) {
Logger.getLogger(MeshObjLoader.class.getName()).log(Level.SEVERE, null, ex);
}
return meshModel;
}
public static MeshModel read(File file) {
try (InputStream is = new FileInputStream(file)) {
return read(is);
} catch (FileNotFoundException ex) {
Logger.getLogger(MeshObjLoader.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(MeshObjLoader.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment