diff --git a/src/main/java/org/xfe/engine/files/Obj.java b/src/main/java/org/xfe/engine/files/Obj.java index 2cd8d77..119dc74 100644 --- a/src/main/java/org/xfe/engine/files/Obj.java +++ b/src/main/java/org/xfe/engine/files/Obj.java @@ -99,6 +99,7 @@ public class Obj { { i.add(a / 3); vbo_el_found = true; + break; } } @@ -116,8 +117,38 @@ public class Obj { // Add new index to indices i.add((temp_v_vbo.size() / 3) - 1); } + } else if (line.contains("/")) { + + } else { // Means the F is just 3 vertex indexes + int vertex_index = (Integer.parseInt(data[index]) - 1) * 3; + + boolean vbo_el_found = false; + for (int a = 0; a < temp_v_vbo.size(); a += 3) { + boolean vertex_found = true; + + for (int b = 0; b < 3; b++) { + if (temp_v_vbo.get(a + b) != v.get(vertex_index + b)) { + vertex_found = false; + break; + } + } + + if (vertex_found) { + i.add(a / 3); + vbo_el_found = true; + break; + } + } + + if (!vbo_el_found) { + for (int a = 0; a < 3; a++) + temp_v_vbo.add(v.get(vertex_index + a)); + + i.add((temp_v_vbo.size() / 3) - 1); + } } + } break; } diff --git a/src/main/java/org/xfe/engine/world/Mesh.java b/src/main/java/org/xfe/engine/world/Mesh.java index 838ec04..078227b 100644 --- a/src/main/java/org/xfe/engine/world/Mesh.java +++ b/src/main/java/org/xfe/engine/world/Mesh.java @@ -2,6 +2,7 @@ package org.xfe.engine.world; import org.lwjgl.opengl.GL30; import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; import org.xfe.engine.files.Obj; import java.nio.FloatBuffer; @@ -64,6 +65,8 @@ public class Mesh { glBindBuffer(GL_ARRAY_BUFFER, vbo_id); glBufferData(GL_ARRAY_BUFFER, vertices_buffer, GL_STATIC_DRAW); + MemoryUtil.memFree(vertices_buffer); + // Set Position Attribute glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); @@ -96,14 +99,16 @@ public class Mesh { // Bind indices in EBO if (this.indices.length > 0) { + + System.out.println(indices.length); vbo_id = glGenBuffers(); vbo_id_list.add(vbo_id); - IntBuffer indice_buffer = stack.callocInt(indices.length); - indice_buffer.put(0, this.indices); +// IntBuffer indice_buffer = stack.callocInt(indices.length); +// indice_buffer.put(0, this.indices); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, indice_buffer, GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW); } glBindBuffer(GL_ARRAY_BUFFER, 0); diff --git a/src/main/java/org/xfe/game/Main.java b/src/main/java/org/xfe/game/Main.java index 5169647..a1343ba 100644 --- a/src/main/java/org/xfe/game/Main.java +++ b/src/main/java/org/xfe/game/Main.java @@ -22,7 +22,7 @@ public class Main implements GameLogic { @Override public void init(Window window, World world, Render render) { - Entity cube = new Entity("resources/objs/sphere.obj", "resources/shaders/shader.frag", "resources/shaders/shader.vert"); + Entity cube = new Entity("resources/objs/teapot.obj", "resources/shaders/shader.frag", "resources/shaders/shader.vert"); cube.model = new Matrix4f().identity().translate(0, 0, -10); System.out.println(cube.model.toString()); @@ -39,8 +39,9 @@ public class Main implements GameLogic { world.entities.get(0).model = new Matrix4f() .identity() .translate(0, 0, -5) - .rotate(ang, 0,1, 0) - .rotate(ang * 2, 0, 0, 1); + .translate(0, -2, 0) + .rotate(ang, 0,1, 0); +// .rotate(ang * 2, 0, 0, 1); ang += 1.0f/100.0f; } }