From 8506065de0d8787f532c3ba63d1b54b7c7abf4b4 Mon Sep 17 00:00:00 2001 From: Antoine Date: Thu, 20 May 2021 15:52:20 +0200 Subject: [PATCH] drawing sprite back to front --- shaders/ObjectGlTex/frag.glsl | 2 +- shaders/ObjectGlTexColor/frag.glsl | 2 +- src/engine/Engine.java | 16 +++++++++------- src/engine/object/ObjectGl.java | 6 ++++++ src/engine/object/ObjectGlColor.java | 1 + src/engine/object/ObjectGlTex.java | 1 + src/engine/object/ObjectGlTexColor.java | 1 + src/engine/object/SortZ.java | 11 +++++++++++ 8 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 src/engine/object/SortZ.java diff --git a/shaders/ObjectGlTex/frag.glsl b/shaders/ObjectGlTex/frag.glsl index 94acf40..37f0ba7 100644 --- a/shaders/ObjectGlTex/frag.glsl +++ b/shaders/ObjectGlTex/frag.glsl @@ -8,5 +8,5 @@ uniform sampler2D texture1; void main() { - FragColor = texture(texture1, vec2(texCoord.y, -texCoord.x)); + FragColor = texture(texture1, vec2(-texCoord.y, -texCoord.x)); } \ No newline at end of file diff --git a/shaders/ObjectGlTexColor/frag.glsl b/shaders/ObjectGlTexColor/frag.glsl index c24a496..9b044ff 100644 --- a/shaders/ObjectGlTexColor/frag.glsl +++ b/shaders/ObjectGlTexColor/frag.glsl @@ -9,5 +9,5 @@ uniform sampler2D texture1; void main() { - FragColor = texture(texture1, vec2(texCoord.y, -texCoord.x)) * color; + FragColor = texture(texture1, vec2(-texCoord.y, -texCoord.x)) * color; } \ No newline at end of file diff --git a/src/engine/Engine.java b/src/engine/Engine.java index 593aa05..75ed333 100644 --- a/src/engine/Engine.java +++ b/src/engine/Engine.java @@ -7,6 +7,7 @@ import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.opengl.GL; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.lwjgl.glfw.GLFW.*; @@ -93,6 +94,8 @@ public class Engine { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + objectsGl.sort(new SortZ()); + // TODO triƩ en fonction de la distance z sinon bug d'affichage for (ObjectGl objectGl : objectsGl) { objectGl.render(); } @@ -104,7 +107,6 @@ public class Engine { public void add_objectGl(ObjectGl obj){ objectsGl.add(obj); - // TODO triƩ en fonction de la distance z sinon bug d'affichage } public void remove_objectGl(ObjectGl obj){ @@ -140,18 +142,18 @@ public class Engine { // Add objects to render List path = new ArrayList<>(); - path.add("textures/awesomeface.png"); + path.add("textures/zangief_sprite.png"); - ObjectGl smiley = new ObjectGlTex(-0.5f,0.5f,0.0f,500.0f,500.0f, path, Primitive.stdTexWrap); + ObjectGl smiley = new ObjectGlTex(-200.5f,200.5f,0.0f,320.0f*6,578.0f*6, path, Primitive.stdTexWrap); engine.add_objectGl(smiley); - smiley.translate(new Vector3f(-2.5f,0.0f,0.0f)); + smiley.translate(new Vector3f(-600.0f,0.0f,9.0f)); ObjectGl smiley2 = new ObjectGlTex(-0.5f,0.5f,0.0f,500.0f,500.0f, path, Primitive.stdTexWrap); engine.add_objectGl(smiley2); - smiley2.translate(new Vector3f(0.0f,0.0f,10.0f)); + smiley2.translate(new Vector3f(0.0f,0.0f,5.0f)); long timer = System.currentTimeMillis(); - long lastFrame = System.currentTimeMillis(); + long lastFrame; int frame = 0; boolean nextFrame = false; @@ -160,7 +162,7 @@ public class Engine { double time = glfwGetTime(); lastFrame = System.currentTimeMillis(); - smiley.translate(new Vector3f( (float) Math.sin(time), (float) Math.cos(time), 0.0f)); + smiley.translate(new Vector3f( (float) Math.sin(time)*5, (float) Math.cos(time)*5, 0.0f)); smiley2.rotateZ(0.8f); diff --git a/src/engine/object/ObjectGl.java b/src/engine/object/ObjectGl.java index 9455a09..4ab9484 100644 --- a/src/engine/object/ObjectGl.java +++ b/src/engine/object/ObjectGl.java @@ -6,6 +6,8 @@ import engine.graphics.Shader; import engine.math.Matrix4f; import engine.math.Vector3f; +import java.util.Comparator; + /** * */ @@ -18,6 +20,8 @@ public class ObjectGl { public static Matrix4f projection; public static Matrix4f view; + public float zPos; + public ObjectGl(){ } @@ -26,6 +30,7 @@ public class ObjectGl { this.vertexArray = new VertexArray(Primitive.createRectangle(x, y, z, h, w), Primitive.rectangle_indices, null, null); this.transform = Matrix4f.identity(); this.shader = new Shader("shaders/ObjectGl/vert.glsl","shaders/ObjectGl/frag.glsl"); + this.zPos = z; } public void resetTransform(){ @@ -34,6 +39,7 @@ public class ObjectGl { public void translate(Vector3f vec){ this.transform = this.transform.multiply(Matrix4f.translate(vec)); + this.zPos += vec.z; } public void scale(Vector3f vec){ diff --git a/src/engine/object/ObjectGlColor.java b/src/engine/object/ObjectGlColor.java index 9b2da72..952105d 100644 --- a/src/engine/object/ObjectGlColor.java +++ b/src/engine/object/ObjectGlColor.java @@ -11,5 +11,6 @@ public class ObjectGlColor extends ObjectGl{ this.vertexArray = new VertexArray(Primitive.createRectangle(x, y, z, h, w), Primitive.rectangle_indices, color, null); this.transform = Matrix4f.identity(); this.shader = new Shader("shaders/ObjectGlColor/vert.glsl","shaders/ObjectGlColor/frag.glsl"); + this.zPos = z; } } diff --git a/src/engine/object/ObjectGlTex.java b/src/engine/object/ObjectGlTex.java index f431c1d..2c14ab6 100644 --- a/src/engine/object/ObjectGlTex.java +++ b/src/engine/object/ObjectGlTex.java @@ -22,6 +22,7 @@ public class ObjectGlTex extends ObjectGl{ this.vertexArray = new VertexArray(Primitive.createRectangle(x, y, z, h, w), Primitive.rectangle_indices, null, texCoord); this.transform = Matrix4f.identity(); this.shader = new Shader("shaders/ObjectGlTex/vert.glsl","shaders/ObjectGlTex/frag.glsl"); + this.zPos = z; this.textures = new ArrayList<>(); int count = 0; diff --git a/src/engine/object/ObjectGlTexColor.java b/src/engine/object/ObjectGlTexColor.java index 686d9cb..8eeaabc 100644 --- a/src/engine/object/ObjectGlTexColor.java +++ b/src/engine/object/ObjectGlTexColor.java @@ -16,6 +16,7 @@ public class ObjectGlTexColor extends ObjectGlTex{ this.vertexArray = new VertexArray(Primitive.createRectangle(x, y, z, h, w), Primitive.rectangle_indices, color, texCoord); this.transform = Matrix4f.identity(); this.shader = new Shader("shaders/ObjectGlTexColor/vert.glsl","shaders/ObjectGlTexColor/frag.glsl"); + this.zPos = z; this.textures = new ArrayList<>(); int count = 0; diff --git a/src/engine/object/SortZ.java b/src/engine/object/SortZ.java new file mode 100644 index 0000000..cc66e86 --- /dev/null +++ b/src/engine/object/SortZ.java @@ -0,0 +1,11 @@ +package engine.object; + +import java.util.Comparator; + +public class SortZ implements Comparator +{ + public int compare(ObjectGl a, ObjectGl b) + { + return (int) (a.zPos - b.zPos); + } +} \ No newline at end of file