I am trying to load vertexes from OBJ file and render them. But only some triangles are rendering.
How the model should look: Blender model
How its rendered: Rendered model
My code:
GL2 gl = glad.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
gl.glRotatef(0.5f, 1f, 1f, 1f);
gl.glColor3f(1, 0, 0);
gl.glBegin(GL2.GL_TRIANGLE_STRIP); // Start Drawing The Cube
try (InputStream in = new FileInputStream("D:\\untitled.obj")) {
final IOBJParser parser = new OBJParser();
final OBJModel model = parser.parse(in);
for(int i = 0; i < model.getVertices().size(); i++) {
System.out.println(model.getVertices().get(i).x + " " + model.getVertices().get(i).y + " " + model.getVertices().get(i).z);
gl.glNormal3f(model.getNormals().get(i).x,model.getNormals().get(i).y, model.getNormals().get(i).z);
gl.glVertex3f(model.getVertices().get(i).x,model.getVertices().get(i).y, model.getVertices().get(i).z);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(EventListener.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(EventListener.class.getName()).log(Level.SEVERE, null, ex);
}
gl.glEnd();
gl.glFlush();
(I know this is far from the most efficient method)
I am using JOGL library for the rendering and java-data-front for loading the obj file and parsing it. The model is loaded correctly, but not rendered.
(Self answering)
I'd have too loop for every object, mesh, and face. And then get the references and indexes as @Rabbid76 said.
The code:
GL2 gl = glad.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT );
gl.glRotatef(0.5f, 1f, 1f, 1f);
gl.glColor3f(1, 0, 0);
gl.glBegin(GL2.GL_TRIANGLE_STRIP); // Start Drawing The Cube
try (InputStream in = new FileInputStream("D:\\untitled.obj")) {
final IOBJParser parser = new OBJParser();
final OBJModel model = parser.parse(in);
for (OBJObject object : model.getObjects()) {
for (OBJMesh mesh : object.getMeshes()) {
for (OBJFace face : mesh.getFaces()) {
for (OBJDataReference reference : face.getReferences()) {
final OBJVertex vertex = model.getVertex(reference);
gl.glVertex3f(vertex.x, vertex.y, vertex.z);
if (reference.hasNormalIndex()) {
final OBJNormal normal = model.getNormal(reference);
gl.glNormal3f(normal.x, normal.y, normal.z);
}
if (reference.hasTexCoordIndex()) {
final OBJTexCoord texCoord = model.getTexCoord(reference);
gl.glTexCoord3f(texCoord.u, texCoord.v, texCoord.w);
}
}
}
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(EventListener.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(EventListener.class.getName()).log(Level.SEVERE, null, ex);
}
gl.glEnd();
gl.glFlush();