diff --git a/.gitattributes b/.gitattributes index c3786a9..4884201 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,3 +6,4 @@ # These are Windows script files and should use crlf *.bat text eol=crlf *.glb filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text diff --git a/app/src/main/java/chess/OpenGLMain.java b/app/src/main/java/chess/OpenGLMain.java index 30ce74e..b3e6195 100644 --- a/app/src/main/java/chess/OpenGLMain.java +++ b/app/src/main/java/chess/OpenGLMain.java @@ -16,5 +16,6 @@ public class OpenGLMain { commandExecutor.executeCommand(new NewGameCommand()); ddd.run(); + commandExecutor.close(); } } diff --git a/app/src/main/java/chess/view/DDDrender/Camera.java b/app/src/main/java/chess/view/DDDrender/Camera.java index db76bdb..a3bc9ae 100644 --- a/app/src/main/java/chess/view/DDDrender/Camera.java +++ b/app/src/main/java/chess/view/DDDrender/Camera.java @@ -16,7 +16,7 @@ public class Camera { private float pitch = 0.0f; public Camera() { - this.pos = new Vector3f(2, 2.0f, 0); + this.pos = new Vector3f(1.5f, 1.5f, 0); setRotation(0.0f, -3.14150f / 2.0f); } diff --git a/app/src/main/java/chess/view/DDDrender/DDDPlacement.java b/app/src/main/java/chess/view/DDDrender/DDDPlacement.java index 4efed75..cf35bcb 100644 --- a/app/src/main/java/chess/view/DDDrender/DDDPlacement.java +++ b/app/src/main/java/chess/view/DDDrender/DDDPlacement.java @@ -6,15 +6,7 @@ import chess.model.Coordinate; class DDDPlacement { static public Vector2f coordinates_to_vector(Coordinate coo) { - // float newX = switch (x) { - // case 0 -> -1 + 0.125f; - // case 1 -> -1 + 0.375f; - // case 2 -> -1 + 0.625f; - // case 3 -> -1 + 0.875f; - - // default -> 0; - // }; - return new Vector2f(-1.0f + 0.125f + coo.getX() * 0.250f, -1.0f + 0.125f + coo.getY() * 0.250f); + return new Vector2f(1.0f - 0.125f - coo.getX() * 0.250f, 1.0f - 0.125f - coo.getY() * 0.250f); } } \ No newline at end of file diff --git a/app/src/main/java/chess/view/DDDrender/ModelLoader.java b/app/src/main/java/chess/view/DDDrender/ModelLoader.java index de7ec87..47048f1 100644 --- a/app/src/main/java/chess/view/DDDrender/ModelLoader.java +++ b/app/src/main/java/chess/view/DDDrender/ModelLoader.java @@ -124,10 +124,13 @@ public class ModelLoader { AIScene scene = Assimp.aiImportFileFromMemory( data, - Assimp.aiProcess_Triangulate | Assimp.aiProcess_PreTransformVertices | - Assimp.aiProcess_ValidateDataStructure, + Assimp.aiProcess_Triangulate | Assimp.aiProcess_PreTransformVertices | Assimp.aiProcess_GlobalScale + | Assimp.aiProcess_ValidateDataStructure, ""); + if (scene == null) + System.err.println(Assimp.aiGetErrorString()); + List vertecies = new ArrayList<>(); processNode(scene.mRootNode(), scene, vertecies); diff --git a/app/src/main/java/chess/view/DDDrender/PieceModel.java b/app/src/main/java/chess/view/DDDrender/PieceModel.java index 55b067c..e7f5571 100644 --- a/app/src/main/java/chess/view/DDDrender/PieceModel.java +++ b/app/src/main/java/chess/view/DDDrender/PieceModel.java @@ -22,7 +22,8 @@ public class PieceModel implements PieceVisitor { public DDDModel getModel(Piece piece) throws IOException { if (piece == null) return null; - String path = basePath + colorToString(piece.getColor()) + "-" + visit(piece) + ".glb"; + + String path = basePath + colorToString(piece.getColor()) + "-" + visit(piece) + ".fbx"; return getModel(path); } @@ -47,7 +48,7 @@ public class PieceModel implements PieceVisitor { @Override public String visitPiece(King king) { - return "knight"; + return "king"; } @Override diff --git a/app/src/main/java/chess/view/DDDrender/Renderer.java b/app/src/main/java/chess/view/DDDrender/Renderer.java index b80f0ec..2044733 100644 --- a/app/src/main/java/chess/view/DDDrender/Renderer.java +++ b/app/src/main/java/chess/view/DDDrender/Renderer.java @@ -80,7 +80,7 @@ public class Renderer { for (int i = 0; i < BOARD_WIDTH; i++) { for (int j = 0; j < BOARD_HEIGHT; j++) { Vector3f color; - if ((i + j) % 2 != 0) { + if ((i + j) % 2 == 0) { color = new Vector3f(1.0f, 1.0f, 1.0f); } else { color = new Vector3f(0.0f, 0.0f, 0.0f); diff --git a/app/src/main/java/chess/view/DDDrender/shader/BoardShader.java b/app/src/main/java/chess/view/DDDrender/shader/BoardShader.java index cc3fdbe..887ab08 100644 --- a/app/src/main/java/chess/view/DDDrender/shader/BoardShader.java +++ b/app/src/main/java/chess/view/DDDrender/shader/BoardShader.java @@ -11,13 +11,19 @@ public class BoardShader extends ShaderProgram { layout(location = 1) in vec3 color; uniform mat4 camMatrix; + uniform vec3 lightPosition; flat out vec3 pass_color; + out vec3 toLightVector; void main(void){ gl_Position = camMatrix * vec4(position, 1.0); + + toLightVector = lightPosition - position; + pass_color = color; } + """; private static String fragmentShader = """ @@ -25,11 +31,34 @@ public class BoardShader extends ShaderProgram { flat in vec3 pass_color; + in vec3 toLightVector; + out vec4 out_color; void main(void){ - out_color = vec4(pass_color, 1.0); + const float shineDamper = 10.0; + const float reflectivity = 1.0; + + float lightDistance = length(toLightVector); + + const vec3 attenuation = vec3(0.3, 0.03, 0); + float attenuationFactor = attenuation.x + attenuation.y * lightDistance + attenuation.z * lightDistance * lightDistance; + + vec3 unitNormal = vec3(0, 1, 0); + vec3 unitLightVector = normalize(toLightVector); + + vec3 lightDirection = -unitLightVector; + vec3 reflectedLightDirection = reflect(lightDirection, unitNormal); + + float diffuse = max(0.2, dot(unitNormal, unitLightVector)); + + float brightness = diffuse / attenuationFactor; + + out_color = brightness * vec4(pass_color, 1.0); + out_color.w = 1.0; + } + """; private int location_CamMatrix = 0; 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 dd2e293..129b802 100644 --- a/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java +++ b/app/src/main/java/chess/view/DDDrender/shader/PieceShader.java @@ -13,11 +13,20 @@ public class PieceShader extends ShaderProgram { uniform mat4 camMatrix; uniform mat4 modelTransform; + uniform vec3 lightPosition = vec3(0, 1, 0); + + out vec3 toLightVector; + out vec3 surfaceNormal; flat out vec3 pass_color; void main(void){ - gl_Position = camMatrix * modelTransform * vec4(position, 1.0); + vec4 worldPos = modelTransform * vec4(position, 1.0); + + toLightVector = lightPosition - worldPos.xyz; + surfaceNormal = (modelTransform * vec4(normal, 0.0)).xyz; + + gl_Position = camMatrix * worldPos; pass_color = position; } """; @@ -25,12 +34,24 @@ public class PieceShader extends ShaderProgram { private static String fragmentShader = """ #version 330 + in vec3 toLightVector; + in vec3 surfaceNormal; + flat in vec3 pass_color; out vec4 out_color; void main(void){ - out_color = vec4(pass_color, 1.0); + vec3 unitNormal = normalize(surfaceNormal); + vec3 unitLightVector = normalize(toLightVector); + + float diffuse = max(0.5, dot(unitNormal, unitLightVector)); + + float brightness = diffuse; + + out_color = vec4(pass_color, 1.0) * brightness; + out_color.w = 1.0; + } """; diff --git a/app/src/main/resources/3d/black-bishop.fbx b/app/src/main/resources/3d/black-bishop.fbx new file mode 100644 index 0000000..bd546c4 --- /dev/null +++ b/app/src/main/resources/3d/black-bishop.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd63f658fdf7aa1a84675a912b093719f7467c3b6a763d938c1068f61f7036bd +size 535276 diff --git a/app/src/main/resources/3d/black-king.fbx b/app/src/main/resources/3d/black-king.fbx new file mode 100644 index 0000000..800bb07 --- /dev/null +++ b/app/src/main/resources/3d/black-king.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aed7f6760d887baf5a902f0c5e2d4be6045de31513a4b790092d30860e69b9b5 +size 2522300 diff --git a/app/src/main/resources/3d/black-knight.fbx b/app/src/main/resources/3d/black-knight.fbx new file mode 100644 index 0000000..d34d5ab --- /dev/null +++ b/app/src/main/resources/3d/black-knight.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b6464861afdb54825032fee689abcae5d593fce6230223b8b4bfa52443f953e +size 606060 diff --git a/app/src/main/resources/3d/black-pawn.fbx b/app/src/main/resources/3d/black-pawn.fbx new file mode 100644 index 0000000..b0b54ea --- /dev/null +++ b/app/src/main/resources/3d/black-pawn.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cee8e15b189278079211f2714bdd537aaeb3b0b7388996e76da49ce58839cf9 +size 1048716 diff --git a/app/src/main/resources/3d/black-queen.fbx b/app/src/main/resources/3d/black-queen.fbx new file mode 100644 index 0000000..0229b78 --- /dev/null +++ b/app/src/main/resources/3d/black-queen.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cec1568b26c3a62135be1d910ecdfa9a390cb12d0f61a2140c757e3119700538 +size 2292300 diff --git a/app/src/main/resources/3d/black-rook.fbx b/app/src/main/resources/3d/black-rook.fbx new file mode 100644 index 0000000..4d71677 --- /dev/null +++ b/app/src/main/resources/3d/black-rook.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:130e2f687e4fd58cd0b1a05b7d004febfc67d2e7f0a9cd5f774d3bd40a98ca08 +size 439452 diff --git a/app/src/main/resources/3d/white-bishop.fbx b/app/src/main/resources/3d/white-bishop.fbx new file mode 100644 index 0000000..4ee9353 --- /dev/null +++ b/app/src/main/resources/3d/white-bishop.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09cfbbc1407082c43cda1db89788fffeac0bc4b159eccc2b30f2cb3305b83754 +size 1810972 diff --git a/app/src/main/resources/3d/white-king.fbx b/app/src/main/resources/3d/white-king.fbx new file mode 100644 index 0000000..0b895f7 --- /dev/null +++ b/app/src/main/resources/3d/white-king.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d24e89efc58f0c4a0768fe2e0b0175f4f842fa589a2faa9d8ea7b24294bb8a42 +size 601708 diff --git a/app/src/main/resources/3d/white-knight.fbx b/app/src/main/resources/3d/white-knight.fbx new file mode 100644 index 0000000..f7ccb80 --- /dev/null +++ b/app/src/main/resources/3d/white-knight.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d1b1d936c001889d133da7819fa1d567fcc1a59c085e95b2cc27fccc1981da4 +size 2804348 diff --git a/app/src/main/resources/3d/white-pawn.fbx b/app/src/main/resources/3d/white-pawn.fbx new file mode 100644 index 0000000..e16ee88 --- /dev/null +++ b/app/src/main/resources/3d/white-pawn.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d48ffec243c6a5ed0a1e8d8c84ff32c064e8ed4152857c252b28bd106692e53c +size 1672236 diff --git a/app/src/main/resources/3d/white-queen.fbx b/app/src/main/resources/3d/white-queen.fbx new file mode 100644 index 0000000..ecd726d --- /dev/null +++ b/app/src/main/resources/3d/white-queen.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee2426381ab9e59bc4564d661a4da4069cea17df788b2edbcc3edd1c186982d +size 4496716 diff --git a/app/src/main/resources/3d/white-rook.fbx b/app/src/main/resources/3d/white-rook.fbx new file mode 100644 index 0000000..088a2b7 --- /dev/null +++ b/app/src/main/resources/3d/white-rook.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab688a54abb56900f4e3f221d5abb2dbedf0d0b7ca722e958cb3b6054ec9665e +size 1956844