package org.jzy3d.io.obj;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import org.apache.log4j.Logger;
import org.jzy3d.io.IGLLoader;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.plot3d.primitives.vbo.drawable.DrawableVBO;
import com.jogamp.common.nio.Buffers;
import com.jogamp.opengl.GL;
public class OBJFileLoader implements IGLLoader{
static Logger logger = Logger.getLogger(OBJFileLoader.class);
protected String filename;
protected OBJFile obj;
public OBJFileLoader(String filename) {
this.filename = filename;
}
@Override
public void load(GL gl, DrawableVBO drawable) {
obj = new OBJFile();
logger.info("Start loading OBJ file '" + filename + "'");
obj.loadModelFromFilename(filename);
logger.info("Start compiling mesh");
obj.compileModel();
logger.info(obj.getPositionCount() + " vertices");
logger.info((obj.getIndexCount() / 3) + " triangles");
int size = obj.getIndexCount();
int indexSize = size * Buffers.SIZEOF_INT;
int vertexSize = obj.getCompiledVertexCount() * Buffers.SIZEOF_FLOAT;
int byteOffset = obj.getCompiledVertexSize() * Buffers.SIZEOF_FLOAT;
int normalOffset = obj.getCompiledNormalOffset() * Buffers.SIZEOF_FLOAT;
int dimensions = obj.getPositionSize();
int pointer = 0;
FloatBuffer vertices = obj.getCompiledVertices();
IntBuffer indices = obj.getCompiledIndices();
BoundingBox3d bounds = obj.computeBoundingBox();
drawable.doConfigure(pointer, size, byteOffset, normalOffset, dimensions);
drawable.doLoadArrayFloatBuffer(gl, vertexSize, vertices);
drawable.doLoadElementIntBuffer(gl, indexSize, indices);
drawable.doSetBoundingBox(bounds);
}
}
Ads help maintain this website.