diff --git a/app/src/main/java/chess/view/DDDrender/Renderer.java b/app/src/main/java/chess/view/DDDrender/Renderer.java index 2ef392b..17451c4 100644 --- a/app/src/main/java/chess/view/DDDrender/Renderer.java +++ b/app/src/main/java/chess/view/DDDrender/Renderer.java @@ -22,6 +22,9 @@ public class Renderer { private VertexArray boardVao; private final PieceModel models; + private static final Vector3f BLACK = new Vector3f(0.1f, 0.1f, 0.1f); + private static final Vector3f WHITE = new Vector3f(0.7f, 0.7f, 0.7f); + public Renderer() { this.boardShader = new BoardShader(); this.pieceShader = new PieceShader(); @@ -37,7 +40,8 @@ public class Renderer { public void RenderPiece(Piece piece, Coordinate pos) { try { DDDModel pieceModel = this.models.getModel(piece); - Render(pieceModel, DDDPlacement.coordinates_to_vector(pos), piece.getColor() == Color.White ? 0.0f : 3.14f); + Render(pieceModel, piece.getColor() == Color.White ? WHITE : BLACK, DDDPlacement.coordinates_to_vector(pos), + piece.getColor() == Color.White ? 0.0f : 3.14f); } catch (IOException e) { e.printStackTrace(); } @@ -51,9 +55,10 @@ public class Renderer { RenderVao(this.boardShader, this.boardVao); } - public void Render(DDDModel model, Vector2f position, float rotation) { + public void Render(DDDModel model, Vector3f color, Vector2f position, float rotation) { Vector3f realPos = new Vector3f(position.x(), 0, position.y()); this.pieceShader.Start(); + this.pieceShader.setModelColor(color); this.pieceShader.setModelTransform(new Matrix4f().translate(realPos).rotate(rotation, new Vector3f(0, 1, 0))); Render(model); } diff --git a/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java b/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java index 129b802..69699ba 100644 --- a/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java +++ b/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java @@ -1,6 +1,7 @@ package chess.view.DDDrender.shader; import org.joml.Matrix4f; +import org.joml.Vector3f; public class PieceShader extends ShaderProgram { @@ -18,8 +19,6 @@ public class PieceShader extends ShaderProgram { out vec3 toLightVector; out vec3 surfaceNormal; - flat out vec3 pass_color; - void main(void){ vec4 worldPos = modelTransform * vec4(position, 1.0); @@ -27,7 +26,6 @@ public class PieceShader extends ShaderProgram { surfaceNormal = (modelTransform * vec4(normal, 0.0)).xyz; gl_Position = camMatrix * worldPos; - pass_color = position; } """; @@ -37,7 +35,7 @@ public class PieceShader extends ShaderProgram { in vec3 toLightVector; in vec3 surfaceNormal; - flat in vec3 pass_color; + uniform vec3 modelColor = vec3(1, 1, 1); out vec4 out_color; @@ -49,7 +47,7 @@ public class PieceShader extends ShaderProgram { float brightness = diffuse; - out_color = vec4(pass_color, 1.0) * brightness; + out_color = vec4(modelColor, 1.0) * brightness; out_color.w = 1.0; } @@ -57,6 +55,7 @@ public class PieceShader extends ShaderProgram { private int location_CamMatrix = 0; private int location_ModelTransform = 0; + private int location_ModelColor = 0; public PieceShader() { @@ -70,6 +69,7 @@ public class PieceShader extends ShaderProgram { protected void GetAllUniformLocation() { location_CamMatrix = GetUniformLocation("camMatrix"); location_ModelTransform = GetUniformLocation("modelTransform"); + location_ModelColor = GetUniformLocation("modelColor"); } public void SetCamMatrix(Matrix4f mat) { @@ -79,4 +79,8 @@ public class PieceShader extends ShaderProgram { public void setModelTransform(Matrix4f mat) { LoadMat4(location_ModelTransform, mat); } + + public void setModelColor(Vector3f color) { + LoadVector(location_ModelColor, color); + } }