everything works when you palce the light in the right spot
This commit is contained in:
1 parent
83feee2706
commit
60457309ae
5 files changed
+48
-28
No files matched your search
@@ -34,7 +34,7 @@ public class Render {
|
||||
|
||||
// System.out.println(projection_matrix.toString());
|
||||
|
||||
Vector3f light_position = new Vector3f(0, 0, -8);
|
||||
Vector3f light_position = new Vector3f(0, 0, 0);
|
||||
|
||||
for (Entity entity : world.entities) {
|
||||
entity.shader.bind();
|
||||
|
||||
@@ -4,13 +4,15 @@ import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Obj {
|
||||
int vertex_count;
|
||||
|
||||
float[] vbo;
|
||||
float[] vertex_vbo;
|
||||
float[] normal_vbo;
|
||||
int[] indices;
|
||||
|
||||
String file_path;
|
||||
@@ -26,7 +28,8 @@ public class Obj {
|
||||
ArrayList<Float> v = new ArrayList<>();
|
||||
ArrayList<Float> vn = new ArrayList<>();
|
||||
ArrayList<Integer> i = new ArrayList<>();
|
||||
ArrayList<Float> temp_vbo = new ArrayList<>();
|
||||
ArrayList<Float> temp_v_vbo = new ArrayList<>();
|
||||
ArrayList<Float> temp_n_vbo = new ArrayList<>();
|
||||
|
||||
String line;
|
||||
String[] face_data_temp;
|
||||
@@ -73,21 +76,21 @@ public class Obj {
|
||||
boolean vbo_el_found = false;
|
||||
|
||||
// We must look for the vertex//normal pair in the existing VBO buffer
|
||||
for (int a = 0; a < temp_vbo.size(); a += 6)
|
||||
for (int a = 0; a < temp_v_vbo.size(); a += 3)
|
||||
{
|
||||
boolean vertex_found = true;
|
||||
boolean normal_found = true;
|
||||
|
||||
// look for vertex
|
||||
for (int b = 0; b < 3; b++)
|
||||
if (temp_vbo.get(a + b) != v.get(vertex_index + b)) {
|
||||
if (temp_n_vbo.get(a + b) != v.get(vertex_index + b)) {
|
||||
vertex_found = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// look for normal
|
||||
for (int b = 3; b < 6; b++)
|
||||
if (temp_vbo.get(a + b) != vn.get(normal_index + b - 3)) {
|
||||
for (int b = 0; b < 3; b++)
|
||||
if (temp_n_vbo.get(a + b) != vn.get(normal_index + b)) {
|
||||
normal_found = false;
|
||||
break;
|
||||
}
|
||||
@@ -104,14 +107,14 @@ public class Obj {
|
||||
{
|
||||
// Add vertex
|
||||
for (int a = 0; a < 3; a++)
|
||||
temp_vbo.add(v.get(vertex_index + a));
|
||||
temp_v_vbo.add(v.get(vertex_index + a));
|
||||
|
||||
// Add normal
|
||||
for (int a = 0; a < 3; a++)
|
||||
temp_vbo.add(vn.get(normal_index + a));
|
||||
temp_n_vbo.add(vn.get(normal_index + a));
|
||||
|
||||
// Add new index to indices
|
||||
i.add((temp_vbo.size() / 6) - 1);
|
||||
i.add((temp_v_vbo.size() / 3) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,12 +124,17 @@ public class Obj {
|
||||
}
|
||||
|
||||
this.indices = ArrayUtils.toPrimitive(i.toArray(Integer[]::new));
|
||||
this.vbo = ArrayUtils.toPrimitive(temp_vbo.toArray(Float[]::new));
|
||||
this.vertex_count = this.vbo.length / 6;
|
||||
this.vertex_vbo = ArrayUtils.toPrimitive(temp_v_vbo.toArray(Float[]::new));
|
||||
this.normal_vbo = ArrayUtils.toPrimitive(temp_n_vbo.toArray(Float[]::new));
|
||||
this.vertex_count = this.vertex_vbo.length / 3;
|
||||
}
|
||||
|
||||
public float[] getVbo() {
|
||||
return vbo;
|
||||
public float[] getVertexVbo() {
|
||||
return vertex_vbo;
|
||||
}
|
||||
|
||||
public float[] getNormalVbo() {
|
||||
return normal_vbo;
|
||||
}
|
||||
|
||||
public int[] getIndices() {
|
||||
|
||||
@@ -7,7 +7,6 @@ import org.xfe.engine.files.Obj;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
@@ -21,13 +20,14 @@ public class Mesh {
|
||||
public int vao_id;
|
||||
public List<Integer> vbo_id_list;
|
||||
|
||||
public float[] vbo_buffer;
|
||||
public float[] vertices;
|
||||
public float[] normals;
|
||||
public int[] indices;
|
||||
|
||||
public Mesh(float[] vbo_buffer, int[] i) {
|
||||
this.vbo_id_list = new ArrayList<>();
|
||||
|
||||
this.vbo_buffer = vbo_buffer;
|
||||
this.vertices = vbo_buffer;
|
||||
this.indices = i;
|
||||
|
||||
this.init();
|
||||
@@ -38,7 +38,8 @@ public class Mesh {
|
||||
this.vbo_id_list = new ArrayList<>();
|
||||
Obj obj = new Obj(obj_file_path);
|
||||
|
||||
this.vbo_buffer = obj.getVbo();
|
||||
this.vertices = obj.getVertexVbo();
|
||||
this.normals = obj.getNormalVbo();
|
||||
this.indices = obj.getIndices();
|
||||
this.vertex_count = obj.getVertexCount();
|
||||
|
||||
@@ -48,26 +49,35 @@ public class Mesh {
|
||||
}
|
||||
|
||||
private void init() {
|
||||
FloatBuffer vertices_buffer = null;
|
||||
|
||||
try {
|
||||
MemoryStack stack = MemoryStack.stackPush();
|
||||
|
||||
// Bind our vertices into the VBO
|
||||
vertices_buffer = stack.callocFloat(this.vbo_buffer.length);
|
||||
|
||||
// Convert from our object list to the primitive float array
|
||||
vertices_buffer.put(0, this.vbo_buffer);
|
||||
|
||||
this.vao_id = glGenVertexArrays();
|
||||
glBindVertexArray(this.vao_id);
|
||||
|
||||
// Bind Vertices into a VBO
|
||||
FloatBuffer vertices_buffer = stack.callocFloat(this.vertices.length);
|
||||
vertices_buffer.put(0, this.vertices);
|
||||
int vbo_id = glGenBuffers();
|
||||
|
||||
vbo_id_list.add(vbo_id);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||
glBufferData(GL_ARRAY_BUFFER, vertices_buffer, GL_STATIC_DRAW);
|
||||
|
||||
// Set Position Attribute
|
||||
glEnableVertexAttribArray(0);
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
|
||||
|
||||
// Bind Normals into a VBO
|
||||
FloatBuffer normals_buffer = stack.callocFloat(this.normals.length);
|
||||
normals_buffer.put(0, this.normals);
|
||||
vbo_id = glGenBuffers();
|
||||
|
||||
vbo_id_list.add(vbo_id);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||
glBufferData(GL_ARRAY_BUFFER, normals_buffer, GL_STATIC_DRAW);
|
||||
|
||||
// Set Normal Attribute
|
||||
glEnableVertexAttribArray(1);
|
||||
glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);
|
||||
|
||||
|
||||
Reference in new issue
Block a user