From 4932b3f6a0cb8d6749d5daa6b408279a6b5b35be Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 24 Aug 2023 17:30:57 +0200 Subject: [PATCH 1/9] Generating Terrain with TerrainTiles --- .../core/engine/renderer/MasterRenderer.java | 5 +- .../core/engine/renderer/TerrainRenderer.java | 9 +- .../java/core/engine/terrain/Terrain.java | 64 +++-------- .../core/engine/terrain/TerrainGenerator.java | 5 + .../java/core/engine/terrain/TerrainTile.java | 102 ++++++++++++++++++ 5 files changed, 132 insertions(+), 53 deletions(-) create mode 100644 client/src/main/java/core/engine/terrain/TerrainGenerator.java create mode 100644 client/src/main/java/core/engine/terrain/TerrainTile.java diff --git a/client/src/main/java/core/engine/renderer/MasterRenderer.java b/client/src/main/java/core/engine/renderer/MasterRenderer.java index 849271e..4c97dc1 100644 --- a/client/src/main/java/core/engine/renderer/MasterRenderer.java +++ b/client/src/main/java/core/engine/renderer/MasterRenderer.java @@ -8,6 +8,7 @@ import core.engine.model.TexturedModel; import core.engine.shader.StaticShader; import core.engine.shader.TerrainShader; import core.engine.terrain.Terrain; +import core.engine.terrain.TerrainTile; import org.lwjgl.opengl.GL11; import utils.vectors.Matrix4f; @@ -27,7 +28,7 @@ public class MasterRenderer { private EntityRenderer renderer; private TerrainRenderer terrainRenderer; private Map> entities = new HashMap<>(); - private List terrains = new ArrayList<>(); + private List terrains = new ArrayList<>(); private Matrix4f projectionMatrix; public MasterRenderer() { @@ -62,7 +63,7 @@ public class MasterRenderer { } public void processTerrain(Terrain terrain) { - terrains.add(terrain); + terrains.addAll(terrain.getTerrainTiles()); } public void processEntity(Entity entity) { diff --git a/client/src/main/java/core/engine/renderer/TerrainRenderer.java b/client/src/main/java/core/engine/renderer/TerrainRenderer.java index 688bf0d..02debc6 100644 --- a/client/src/main/java/core/engine/renderer/TerrainRenderer.java +++ b/client/src/main/java/core/engine/renderer/TerrainRenderer.java @@ -5,6 +5,7 @@ import core.engine.model.RawModel; import core.engine.model.TexturedModel; import core.engine.shader.TerrainShader; import core.engine.terrain.Terrain; +import core.engine.terrain.TerrainTile; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL20; @@ -26,8 +27,8 @@ public class TerrainRenderer { shader.stop(); } - public void render(List terrains) { - for(Terrain terrain : terrains) { + public void render(List terrains) { + for(TerrainTile terrain : terrains) { prepareTerrain(terrain); loadModelMatrix(terrain); GL11.glDrawElements(GL11.GL_TRIANGLES, terrain.getModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); @@ -35,7 +36,7 @@ public class TerrainRenderer { } } - private void prepareTerrain(Terrain model) { + private void prepareTerrain(TerrainTile model) { RawModel rawModel = model.getModel(); GL30.glBindVertexArray(rawModel.getVaoID()); GL20.glEnableVertexAttribArray(0); @@ -52,7 +53,7 @@ public class TerrainRenderer { GL30.glBindVertexArray(0); } - private void loadModelMatrix(Terrain terrain) { + private void loadModelMatrix(TerrainTile terrain) { Matrix4f transformationMatrix = MatrixGraphicUtils.createTransformationMatrix(new Vector3f(terrain.getX(), 0, terrain.getZ()), 0,0,0,1); shader.loadTransformationMatrix(transformationMatrix); } diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index 54dbd29..7c59079 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -4,60 +4,30 @@ import core.engine.Loader; import core.engine.model.RawModel; import core.engine.textures.ModelTexture; +import java.util.ArrayList; +import java.util.List; + public class Terrain { - private static final float WIDTH = 100; - private static final float DEPTH = 100; + private static final float SIZE = 100; + private static final int VERTEX_COUNT = 128; private float x; private float z; - private RawModel model; - private ModelTexture texture; + + private List terrainTiles = new ArrayList<>(); public Terrain(int gridX, int gridZ, Loader loader, ModelTexture modelTexture) { - this.texture = modelTexture; - this.x = gridX * WIDTH; - this.z = gridZ * DEPTH; - this.model = generateTerrain(loader); - } + this.x = gridX * SIZE; + this.z = gridZ * SIZE; - private RawModel generateTerrain(Loader loader){ - int count = VERTEX_COUNT * VERTEX_COUNT; - float[] vertices = new float[count * 3]; - float[] normals = new float[count * 3]; - float[] textureCoords = new float[count*2]; - int[] indices = new int[6*(VERTEX_COUNT-1)*(VERTEX_COUNT-1)]; - int vertexPointer = 0; - for(int i=0;i getTerrainTiles() { + return terrainTiles; } - public ModelTexture getTexture() { - return texture; + public void setTerrainTiles(List terrainTiles) { + this.terrainTiles = terrainTiles; } } diff --git a/client/src/main/java/core/engine/terrain/TerrainGenerator.java b/client/src/main/java/core/engine/terrain/TerrainGenerator.java new file mode 100644 index 0000000..b76763a --- /dev/null +++ b/client/src/main/java/core/engine/terrain/TerrainGenerator.java @@ -0,0 +1,5 @@ +package core.engine.terrain; + +public class TerrainGenerator { + +} diff --git a/client/src/main/java/core/engine/terrain/TerrainTile.java b/client/src/main/java/core/engine/terrain/TerrainTile.java new file mode 100644 index 0000000..2f10c6a --- /dev/null +++ b/client/src/main/java/core/engine/terrain/TerrainTile.java @@ -0,0 +1,102 @@ +package core.engine.terrain; + +import core.engine.Loader; +import core.engine.model.RawModel; +import core.engine.textures.ModelTexture; + +public class TerrainTile { + + private RawModel model; + private ModelTexture texture; + + private float x; + private float z; + + public TerrainTile(Loader loader, ModelTexture texture, int row, int column, int VERTEX_COUNT, float size) { + float[] vertices = new float[12]; // 4 vertices * 3 coordinates + float[] normals = new float[12]; // 4 normals * 3 coordinates + float[] textureCoords = new float[8]; // 4 texture coords * 2 coordinates + int[] indices = new int[6]; // 2 triangles * 3 indices + + //Calculate positions for the four vertices of this terrain tile + float x0 = (float) column / (VERTEX_COUNT - 1) * size; + float x1 = (float) (column + 1) / (VERTEX_COUNT - 1) * size; + float z0 = (float) row / (VERTEX_COUNT - 1) * size; + float z1 = (float) (row + 1) / (VERTEX_COUNT - 1) * size; + + // Populate vertices, normals, and textureCoords arrays based on the calculated positions + //Vertices + // Vertex 0 + vertices[0] = x0; + vertices[1] = 0; + vertices[2] = z0; + + // Vertex 1 + vertices[3] = x0; + vertices[4] = 0; + vertices[5] = z1; + + // Vertex 2 + vertices[6] = x1; + vertices[7] = 0; + vertices[8] = z0; + + // Vertex 3 + vertices[9] = x1; + vertices[10] = 0; + vertices[11] = z1; + + //Normals + for(int i=0; i Date: Thu, 24 Aug 2023 20:08:41 +0200 Subject: [PATCH 2/9] Fix gaps in TerrainTiles --- client/src/main/java/core/engine/Engine.java | 11 +- .../core/engine/renderer/MasterRenderer.java | 12 ++ .../java/core/engine/terrain/Terrain.java | 30 +---- .../core/engine/terrain/TerrainGenerator.java | 5 - .../java/core/engine/terrain/TerrainTile.java | 120 ++++++++---------- 5 files changed, 75 insertions(+), 103 deletions(-) delete mode 100644 client/src/main/java/core/engine/terrain/TerrainGenerator.java diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index 69e18bf..dadb681 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -118,7 +118,7 @@ public class Engine { glClearColor(1.0f, 0.0f, 0.0f, 0.0f); Camera camera = new Camera(); - input(camera); + Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); RawModel model = OBJLoader.loadOBJModel("dragon", loader); @@ -127,11 +127,12 @@ public class Engine { Entity entity = new Entity(texturedModel, new Vector3f(0,0,-50), 0,0,0,1); //Generate Simple, Flat Terrain - Terrain terrain = new Terrain(0,0, loader, new ModelTexture(loader.loadTexture("grass"))); + Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("grass"))); // Run the rendering loop until the user has attempted to close // the window or has pressed the ESCAPE key. MasterRenderer renderer = new MasterRenderer(); + input(camera, renderer); while ( !glfwWindowShouldClose(window) ) { //entity.increaseRotation(0,1,0); renderer.processTerrain(terrain); @@ -146,7 +147,7 @@ public class Engine { loader.cleanUp(); } - private void input(Camera camera) { + private void input(Camera camera, MasterRenderer masterRenderer) { GLFWScrollCallback glfwScrollCallback = new GLFWScrollCallback() { @Override @@ -226,6 +227,10 @@ public class Engine { if(key == GLFW_KEY_S) { camera.moveBackward(); } + + if(key == GLFW_KEY_Y && action == GLFW_PRESS) { + masterRenderer.switchWireframe(); + } } }); diff --git a/client/src/main/java/core/engine/renderer/MasterRenderer.java b/client/src/main/java/core/engine/renderer/MasterRenderer.java index 4c97dc1..c0080db 100644 --- a/client/src/main/java/core/engine/renderer/MasterRenderer.java +++ b/client/src/main/java/core/engine/renderer/MasterRenderer.java @@ -31,6 +31,8 @@ public class MasterRenderer { private List terrains = new ArrayList<>(); private Matrix4f projectionMatrix; + private boolean wireframe = false; + public MasterRenderer() { GL11.glEnable(GL11.GL_CULL_FACE); GL11.glCullFace(GL11.GL_BACK); @@ -98,4 +100,14 @@ public class MasterRenderer { projectionMatrix.m33 = 0; } + + public void switchWireframe() { + this.wireframe = !this.wireframe; + + if(this.wireframe) { + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + } else { + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + } + } } diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index 7c59079..0486a38 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -9,40 +9,18 @@ import java.util.List; public class Terrain { - private static final float SIZE = 100; - - private static final int VERTEX_COUNT = 128; - - private float x; - private float z; private List terrainTiles = new ArrayList<>(); - public Terrain(int gridX, int gridZ, Loader loader, ModelTexture modelTexture) { - this.x = gridX * SIZE; - this.z = gridZ * SIZE; - - for (int row = 0; row < VERTEX_COUNT - 1; row++) { - for (int column = 0; column < VERTEX_COUNT - 1; column++) { - TerrainTile terrainTile = new TerrainTile(loader, modelTexture, row, column, VERTEX_COUNT, SIZE); - terrainTiles.add(terrainTile); + public Terrain(Loader loader, ModelTexture modelTexture) { + for(int i=0; i<32; i++) { + for(int j=0; j<32; j++) { + terrainTiles.add(new TerrainTile(i, j, loader, modelTexture)); } } } - public float getX() { - return x; - } - - public float getZ() { - return z; - } - public List getTerrainTiles() { return terrainTiles; } - - public void setTerrainTiles(List terrainTiles) { - this.terrainTiles = terrainTiles; - } } diff --git a/client/src/main/java/core/engine/terrain/TerrainGenerator.java b/client/src/main/java/core/engine/terrain/TerrainGenerator.java deleted file mode 100644 index b76763a..0000000 --- a/client/src/main/java/core/engine/terrain/TerrainGenerator.java +++ /dev/null @@ -1,5 +0,0 @@ -package core.engine.terrain; - -public class TerrainGenerator { - -} diff --git a/client/src/main/java/core/engine/terrain/TerrainTile.java b/client/src/main/java/core/engine/terrain/TerrainTile.java index 2f10c6a..18bb0de 100644 --- a/client/src/main/java/core/engine/terrain/TerrainTile.java +++ b/client/src/main/java/core/engine/terrain/TerrainTile.java @@ -2,101 +2,83 @@ package core.engine.terrain; import core.engine.Loader; import core.engine.model.RawModel; +import core.engine.model.TexturedModel; import core.engine.textures.ModelTexture; public class TerrainTile { - private RawModel model; - private ModelTexture texture; + private static final float SIZE = 32; + + private static final int VERTEX_COUNT = 33; private float x; private float z; + private RawModel model; + private ModelTexture texture; - public TerrainTile(Loader loader, ModelTexture texture, int row, int column, int VERTEX_COUNT, float size) { - float[] vertices = new float[12]; // 4 vertices * 3 coordinates - float[] normals = new float[12]; // 4 normals * 3 coordinates - float[] textureCoords = new float[8]; // 4 texture coords * 2 coordinates - int[] indices = new int[6]; // 2 triangles * 3 indices - - //Calculate positions for the four vertices of this terrain tile - float x0 = (float) column / (VERTEX_COUNT - 1) * size; - float x1 = (float) (column + 1) / (VERTEX_COUNT - 1) * size; - float z0 = (float) row / (VERTEX_COUNT - 1) * size; - float z1 = (float) (row + 1) / (VERTEX_COUNT - 1) * size; - - // Populate vertices, normals, and textureCoords arrays based on the calculated positions - //Vertices - // Vertex 0 - vertices[0] = x0; - vertices[1] = 0; - vertices[2] = z0; - - // Vertex 1 - vertices[3] = x0; - vertices[4] = 0; - vertices[5] = z1; - - // Vertex 2 - vertices[6] = x1; - vertices[7] = 0; - vertices[8] = z0; - - // Vertex 3 - vertices[9] = x1; - vertices[10] = 0; - vertices[11] = z1; - - //Normals - for(int i=0; i Date: Fri, 25 Aug 2023 07:20:04 +0200 Subject: [PATCH 3/9] Generate single Hexagon --- client/res/white.png | Bin 0 -> 575 bytes client/src/main/java/core/engine/Engine.java | 11 ++- .../main/java/core/engine/entity/Camera.java | 2 +- .../java/core/engine/model/HexagonModel.java | 88 ++++++++++++++++++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 client/res/white.png create mode 100644 client/src/main/java/core/engine/model/HexagonModel.java diff --git a/client/res/white.png b/client/res/white.png new file mode 100644 index 0000000000000000000000000000000000000000..c81624bb8f1377a152a4546ae6139b6326a186d3 GIT binary patch literal 575 zcmV-F0>J%=P)EX>4Tx04R}tkv&MmP!xqvQ^lecK|6>zWT;LSL`5963Pq?8YK2xEOkVm2O&XFE z7e~Rh;NZ_<)xpJCR|i)?5c~mgb#YR3krMAq3N2#1@OU5R-E(;FK0v6KnPzp21DbA| zsYG1NWLL$mSA@`megqJZnPtpLQWC!Pbx(a%cQKyj-}h(rsyT}R0g-r?8KzCVK|H-_ z8=UuvBdjQ^#OK6gCS8#Dk?V@bZ=4G*3p_Jorc?985n{2>#!4HrqNx#25l2-`r+gvf zvC4UivsSLM<~{if!#RCrnd`KMk-#FBAVGwJDoQBBMvQiy6bmUjkNfzCT)#vvgpt%ewa@L}p62|10MmSOXLJRci2wiq32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Ri2n!McDP-@HX#fBK8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b z04PaBK~zY`?ae^}000C8F!b+yO7PnXtdrEIsb>O#Kp+qZ1OkEJ$^ysn13g6}bT Date: Wed, 4 Oct 2023 08:55:13 +0200 Subject: [PATCH 4/9] Remove usement of unused entity dragon (remaining from tut) --- client/src/main/java/core/engine/Engine.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index 4a4411b..fdaf483 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -122,10 +122,6 @@ public class Engine { Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); - RawModel model = OBJLoader.loadOBJModel("dragon", loader); - ModelTexture modelTexture = new ModelTexture(loader.loadTexture("white")); - TexturedModel texturedModel = new TexturedModel(model, modelTexture); - Entity entity = new Entity(texturedModel, new Vector3f(0,0,-50), 0,0,0,1); //Generate Simple, Flat Terrain Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("grass"))); @@ -143,9 +139,6 @@ public class Engine { input(camera, renderer); while ( !glfwWindowShouldClose(window) ) { renderer.processEntity(hexagonEntity); - //entity.increaseRotation(0,1,0); - //renderer.processTerrain(terrain); - //renderer.processEntity(entity); renderer.render(light, camera); glfwSwapBuffers(window); // swap the color buffers // Poll for window events. The key callback above will only be From 88099c41c0b0028a852db3e83e73e45fdddf058d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 4 Oct 2023 08:57:52 +0200 Subject: [PATCH 5/9] Load Hexagonmodel directly in loader --- client/src/main/java/core/engine/Engine.java | 2 +- client/src/main/java/core/engine/Loader.java | 5 +++++ client/src/main/java/core/engine/terrain/Terrain.java | 1 - 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index fdaf483..64a6e07 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -128,7 +128,7 @@ public class Engine { //Create Hexagon HexagonModel hexagonModel = new HexagonModel(); - RawModel hexagonRawModel = loader.loadToVAO(hexagonModel.getVertices(), hexagonModel.getTextureCoords(), hexagonModel.getNormals(), hexagonModel.getIndices()); + RawModel hexagonRawModel = loader.loadHexagon(hexagonModel); ModelTexture hexagonTexture = new ModelTexture(loader.loadTexture("white")); TexturedModel hexagontexturedModel = new TexturedModel(hexagonRawModel, hexagonTexture); Entity hexagonEntity = new Entity(hexagontexturedModel, new Vector3f(0,1,0), 0,0,0,1); diff --git a/client/src/main/java/core/engine/Loader.java b/client/src/main/java/core/engine/Loader.java index 143ed4c..50e3f21 100644 --- a/client/src/main/java/core/engine/Loader.java +++ b/client/src/main/java/core/engine/Loader.java @@ -1,5 +1,6 @@ package core.engine; +import core.engine.model.HexagonModel; import core.engine.model.RawModel; import core.engine.textures.Texture; import org.lwjgl.BufferUtils; @@ -29,6 +30,10 @@ public class Loader { return new RawModel(vaoID, indices.length); } + public RawModel loadHexagon(HexagonModel hexagonModel) { + return loadToVAO(hexagonModel.getVertices(), hexagonModel.getTextureCoords(), hexagonModel.getNormals(), hexagonModel.getIndices()); + } + public int loadTexture(String fileName) { Texture texture = new Texture("res/" + fileName + ".png"); int textureID = texture.getTextureID(); diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index 0486a38..f04a728 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -9,7 +9,6 @@ import java.util.List; public class Terrain { - private List terrainTiles = new ArrayList<>(); public Terrain(Loader loader, ModelTexture modelTexture) { From c5ca9f435e0077eaf1f2d301dcac8e20226376d5 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 4 Oct 2023 09:55:09 +0200 Subject: [PATCH 6/9] Wierd looking terrain --- client/src/main/java/core/engine/Engine.java | 5 +- .../main/java/core/engine/entity/Camera.java | 2 +- .../core/engine/renderer/TerrainRenderer.java | 11 +- .../engine/shader/terrainFragmentShader.glsl | 2 +- .../java/core/engine/terrain/Terrain.java | 12 +- .../java/core/engine/terrain/TerrainTile.java | 108 ++++++++---------- 6 files changed, 68 insertions(+), 72 deletions(-) diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index 64a6e07..ece4d85 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -124,7 +124,7 @@ public class Engine { Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); //Generate Simple, Flat Terrain - Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("grass"))); + Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white"))); //Create Hexagon HexagonModel hexagonModel = new HexagonModel(); @@ -138,7 +138,8 @@ public class Engine { MasterRenderer renderer = new MasterRenderer(); input(camera, renderer); while ( !glfwWindowShouldClose(window) ) { - renderer.processEntity(hexagonEntity); + renderer.processTerrain(terrain); + //renderer.processEntity(hexagonEntity); renderer.render(light, camera); glfwSwapBuffers(window); // swap the color buffers // Poll for window events. The key callback above will only be diff --git a/client/src/main/java/core/engine/entity/Camera.java b/client/src/main/java/core/engine/entity/Camera.java index f853f22..2399148 100644 --- a/client/src/main/java/core/engine/entity/Camera.java +++ b/client/src/main/java/core/engine/entity/Camera.java @@ -4,7 +4,7 @@ import utils.vectors.Vector3f; public class Camera { - private Vector3f position = new Vector3f(0,2,0); + private Vector3f position = new Vector3f(0,37,-1); private float pitch = 90; private float yaw = 180; private float roll; diff --git a/client/src/main/java/core/engine/renderer/TerrainRenderer.java b/client/src/main/java/core/engine/renderer/TerrainRenderer.java index 02debc6..4cdac2b 100644 --- a/client/src/main/java/core/engine/renderer/TerrainRenderer.java +++ b/client/src/main/java/core/engine/renderer/TerrainRenderer.java @@ -31,19 +31,19 @@ public class TerrainRenderer { for(TerrainTile terrain : terrains) { prepareTerrain(terrain); loadModelMatrix(terrain); - GL11.glDrawElements(GL11.GL_TRIANGLES, terrain.getModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); + GL11.glDrawElements(GL11.GL_TRIANGLES, terrain.getModel().getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); unbindTexturedModel(); } } - private void prepareTerrain(TerrainTile model) { - RawModel rawModel = model.getModel(); + private void prepareTerrain(TerrainTile terrainTile) { + RawModel rawModel = terrainTile.getModel().getRawModel(); GL30.glBindVertexArray(rawModel.getVaoID()); GL20.glEnableVertexAttribArray(0); GL20.glEnableVertexAttribArray(1); GL20.glEnableVertexAttribArray(2); GL13.glActiveTexture(GL13.GL_TEXTURE0); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getTexture().getTextureID()); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, terrainTile.getModel().getModelTexture().getTextureID()); } private void unbindTexturedModel() { @@ -54,7 +54,8 @@ public class TerrainRenderer { } private void loadModelMatrix(TerrainTile terrain) { - Matrix4f transformationMatrix = MatrixGraphicUtils.createTransformationMatrix(new Vector3f(terrain.getX(), 0, terrain.getZ()), 0,0,0,1); + Matrix4f transformationMatrix = MatrixGraphicUtils.createTransformationMatrix(terrain.getPosition(), terrain.getRotX(), + terrain.getRotY(), terrain.getRotZ(), terrain.getScale()); shader.loadTransformationMatrix(transformationMatrix); } } diff --git a/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl b/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl index bd7f6d4..45026bc 100644 --- a/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl +++ b/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl @@ -17,5 +17,5 @@ void main(void) { float brightness = max(nDotl, 0.2); vec3 diffusde = brightness * lightColor; - out_Color = vec4(diffusde, 1.0) * texture(textureSampler, pass_textureCoords); + out_Color = texture(textureSampler, pass_textureCoords); } \ No newline at end of file diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index f04a728..1d21b4b 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -1,8 +1,11 @@ package core.engine.terrain; import core.engine.Loader; +import core.engine.model.HexagonModel; import core.engine.model.RawModel; +import core.engine.model.TexturedModel; import core.engine.textures.ModelTexture; +import utils.vectors.Vector3f; import java.util.ArrayList; import java.util.List; @@ -12,9 +15,12 @@ public class Terrain { private List terrainTiles = new ArrayList<>(); public Terrain(Loader loader, ModelTexture modelTexture) { - for(int i=0; i<32; i++) { - for(int j=0; j<32; j++) { - terrainTiles.add(new TerrainTile(i, j, loader, modelTexture)); + HexagonModel hexagonModel = new HexagonModel(); + RawModel rawModel = loader.loadHexagon(hexagonModel); + TexturedModel texturedModel = new TexturedModel(rawModel, modelTexture); + for(int j=22; j>0; j--) { + for(int i=-8; i<8; i++) { + terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(j - 0.75f *2,0, i* (float)(0.866*2)), 0, 30, 0, 1)); } } } diff --git a/client/src/main/java/core/engine/terrain/TerrainTile.java b/client/src/main/java/core/engine/terrain/TerrainTile.java index 18bb0de..42c9c65 100644 --- a/client/src/main/java/core/engine/terrain/TerrainTile.java +++ b/client/src/main/java/core/engine/terrain/TerrainTile.java @@ -4,81 +4,69 @@ import core.engine.Loader; import core.engine.model.RawModel; import core.engine.model.TexturedModel; import core.engine.textures.ModelTexture; +import utils.vectors.Vector3f; public class TerrainTile { - private static final float SIZE = 32; + private TexturedModel model; + private Vector3f position; + private float rotX, rotY, rotZ; + private float scale; - private static final int VERTEX_COUNT = 33; - - private float x; - private float z; - private RawModel model; - private ModelTexture texture; - - public TerrainTile(int gridX, int gridZ, Loader loader, ModelTexture texture) { - this.x = gridX; - this.z = gridZ; - this.texture = texture; - this.model = generateTerrain(loader); + public TerrainTile(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale) { + this.model = model; + this.position = position; + this.rotX = rotX; + this.rotY = rotY; + this.rotZ = rotZ; + this.scale = scale; } - private RawModel generateTerrain(Loader loader) { - int count = VERTEX_COUNT * VERTEX_COUNT; - float[] vertices = new float[count * 3]; - float[] normals = new float[count * 3]; - float[] textureCoords = new float[count*2]; - int[] indices = new int[6*(VERTEX_COUNT-1)*(VERTEX_COUNT-1)]; - int vertexPointer = 0; - for(int i=0;i Date: Thu, 5 Oct 2023 12:14:06 +0200 Subject: [PATCH 7/9] Fix wierd looking terrain --- client/res/white.png | Bin 575 -> 4868 bytes client/src/main/java/core/engine/Engine.java | 2 +- .../engine/shader/terrainVertexShader.glsl | 2 +- .../main/java/core/engine/terrain/Terrain.java | 14 ++++++++++---- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/client/res/white.png b/client/res/white.png index c81624bb8f1377a152a4546ae6139b6326a186d3..3ab7683da41f6a53b413eae66c95f652d79e91dd 100644 GIT binary patch literal 4868 zcmeHLX;c$g7A_kE#Dx}7T16=XYKtVP$_9yq#RLLk5P?PzTq;!+C?JbT0TD$O5!)Ue zTybg9R=^QknWOf&dz2OhafD{NK?Ff@7hDirP+OgsfGnr`oH?E|{g2A2%B%P8{ocLb zyZ7e3tO*X14YwX=4MEWG0Dox+_=b(Ql?8a}Q&L_)klCb^un0N?ONO;Njgm?rVS1^S zgh>OXgdjuxldVx3?@bw&eKXQGH{Cg_REKOkaNQ?&x8vHzt=o&~DND;QWOzoK=Vp0g z^Hz6MIXeBG@$=kJ|F~U&l_Mu_2|J;<_1vW_ZrZ+@;-8ld>9A>Ub48??3yZ0f_Ce+7 zJ~6w&s_~u1_jS69-`iust+|el_sYV{KSWl)@_u;4;oXYG(`}n37REOnlbt+~>ONo7 zpsQ!3y_<|y?zn7QUs~;Izcvr&lpdWUlifLD_h|GlGHunfL&J7=+HL$cJd4dHKS*0P z=dasqC75zXniVc(^Sp=H-=eN($1Tr%<0;UfZ}%>L5HZs4lF;p3{;LnHNVb1E6(*Qmroou!|$0kr#khZzie@BX3ODA**jYfH}9M9mAwL)xOsnQq0fVs@%$6pItfYDjW4d) zir~>|&ZbFMXRVZfM=x=fMF}@&IWCIb&b$)slp`(;s;e+3xw}`K&VHtLz?&xTeK_af zE&Hn3tL--PBqu1)yCQwH73$M>IJ zjBjQbQsYa+%!RXxM*B_Y>4rcu(z08{vQU$UGmn%-KI!-)|#m&FAuw!|K=3oUNkD`9|6P6e+@Xea$?f=(cX3+ zN2yDeFS(Nz$eK;xbbie}zG!Z1$Motkhg-*0{@_>gWW2y-#)q~y?@!sJ9dADUKCrs) z=i|Z+YtflyX&KGzq~)cp*>#x@AZXAkN+JmkkVrly3rLZjsT;)p7rY%VE{Y2LSD1q< zk@#0)9)4lU>M51;{ZB5BHUz&S)M=#iE zx1gZ(Df_23?i3F#=s6npAQLM)GNEdFxNC>h~fxLi|V&k7(Y7Zm7T=BV9&Igcu=!wl?lj*zbW>2s z*A|_NTw8H-tH)nlJw>KEMum5nw~5W>#WgHaK}UBNTx*zr*Xm(|1*^DW$4{2gPob4_ zcI^M#vAg+?n0D!}xo`J5{E{}*{Myc@`S09QAdMEo;2j*qC?r{jz;E zH*Mmbbp_+ie*6klwIm8uuL${U5w20OFhZjsSq7CBR5u9n@G@vIJf5Us1sOxB#f)dC z&oN+%5HsfS<%nD>A!8~36df6w5)_7~#N$GO;pJ)VVGscT6-i^TL6xA^iwt6h30DN# z#%?wPHi^*jVn&2K7?x;sB+O&+SP0YCKqYY)p4PC3j!=q1q<-BH;7!bkrD?5*%}!2E zW+ii38eI$<6$*uHgu~`=m_UN5U#g}t15>ScGD37=NJ%}eqqH=oQNu<|Orc4n#S8`* zhdNSZvob*j1 z)wEMz2ml4|foqj>>RF~c~&h|u5^Au=^Nd?AleDELgC8-g-< z0ymtg;Jaf?fs&6ZP)xyh<0|_=1*r8jrp8Gl6aZ&Y00$LdN?eE&Oa$Q&0EaJN3NgZs zDdY=Lgb<*7lF#h}F-J#%sKgTbT4jVH02BvDg#^hZnH)p_Od@a;peTVgT-=Q$IXF%# z2@@27i~KY?6$X}*QeiP9TdR&S4HyX*`2+`u85|bU+Y_9C(Mq5Ia)443nq+w9aGAKk&7H}^36zPs^OQ^liDNuOsU!qE%)~+ux?ZEClQA9X z69aezT!8>JaRq6QwqEJ0=E8@SNA&nl~cg*z$Bl=?*Lr`bbS^BpCvpHT?2G|76YFpJP=*~ zH@d8Q4^yNX?0}NNQOR-EdImUVSttT!QqzG8dLucV23kY3{*ihJVmTS_L54!FB+zL| z2grRbA6O5z9_sY!qZItP1dXMABWQ_6W!#fPri~&=z{wOH3mZ3z^D;)*10mM{sZUtM yg(sEhAPBND`+@pc$<4NLUR*E85mcG?zedQvHTUp;RQD9@x&(&CwmGye;}D;moH delta 525 zcmV+o0`mQYCcgxb8Gix*008_L?V|ty0flKpLr_UWLm+T+Z)Rz1WdHyuk$sUpNW)MR zg-=t(q7^|qh&W`ZP8LK(9JLBXs1Ry}Rvk=U`Ug!Kk`xz5!L{Jv&tlcV#aUMeS3wZ` z0daM4Qgo3L?@J0TV!ZHpALre3c<(+ysF#^$b&La=Zkwq@Tz|}DSH-SZgwTV21Q3v! zWz0!Z62A3yPkmH(F`nh$_hx##3oC_`sJTqdZQ}e_TVzJQ1N*lAHsS!^RM^#Oyd?Dkp%6W^kR<5$$HZEz#^6)L4SmTDoQBBMvQiy6bmUjkNfzCT)#vvg+{&1Ozbj?|e$|+X}3c)TgOu0)apv5C{YUf#Avl$MFL_MI&@K P00000NkvXXu0mjf>+#@P diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index ece4d85..1da8d41 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -124,7 +124,7 @@ public class Engine { Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); //Generate Simple, Flat Terrain - Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white"))); + Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white")), 16, 32); //Create Hexagon HexagonModel hexagonModel = new HexagonModel(); diff --git a/client/src/main/java/core/engine/shader/terrainVertexShader.glsl b/client/src/main/java/core/engine/shader/terrainVertexShader.glsl index 36b0d54..6dfd1b2 100644 --- a/client/src/main/java/core/engine/shader/terrainVertexShader.glsl +++ b/client/src/main/java/core/engine/shader/terrainVertexShader.glsl @@ -17,7 +17,7 @@ out vec3 toLightVector; void main(void) { vec4 worldPosition = transformationMatrix * vec4(position, 1.0); gl_Position = projectionMatrix * viewMatrix * worldPosition; - pass_textureCoords = textureCoords * 40; + pass_textureCoords = textureCoords; surfaceNormal = (transformationMatrix * vec4(normal, 0.0)).xyz; toLightVector = lightPosition - worldPosition.xyz; diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index 1d21b4b..387f76f 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -14,13 +14,19 @@ public class Terrain { private List terrainTiles = new ArrayList<>(); - public Terrain(Loader loader, ModelTexture modelTexture) { + public Terrain(Loader loader, ModelTexture modelTexture, int rows, int columns) { HexagonModel hexagonModel = new HexagonModel(); RawModel rawModel = loader.loadHexagon(hexagonModel); TexturedModel texturedModel = new TexturedModel(rawModel, modelTexture); - for(int j=22; j>0; j--) { - for(int i=-8; i<8; i++) { - terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(j - 0.75f *2,0, i* (float)(0.866*2)), 0, 30, 0, 1)); + for(int row = 0; row < rows; row++) { + for(int column = 0; column < columns; column++) { + if(row % 2 == 1) { + terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column * 2* 0.866f, 0, row * 1.5f),0,0,0,1)); + + } else { + terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column *2 * 0.866f - 0.866f, 0, row * 1.5f),0,0,0,1)); + } + } } } From db7c533206fe5de2b032754a8a58fc93ef5831e6 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 5 Oct 2023 12:33:47 +0200 Subject: [PATCH 8/9] Assign to each TerrainTile a random color --- client/res/hexagon.blend | Bin 0 -> 917996 bytes .../core/engine/renderer/TerrainRenderer.java | 1 + .../java/core/engine/shader/TerrainShader.java | 7 +++++++ .../engine/shader/terrainFragmentShader.glsl | 3 ++- .../java/core/engine/terrain/TerrainTile.java | 11 +++++++++++ 5 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 client/res/hexagon.blend diff --git a/client/res/hexagon.blend b/client/res/hexagon.blend new file mode 100644 index 0000000000000000000000000000000000000000..52c361622dacd1c6491d6b20114eddd3dc531012 GIT binary patch literal 917996 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 literal 0 HcmV?d00001 diff --git a/client/src/main/java/core/engine/renderer/TerrainRenderer.java b/client/src/main/java/core/engine/renderer/TerrainRenderer.java index 4cdac2b..4704a2e 100644 --- a/client/src/main/java/core/engine/renderer/TerrainRenderer.java +++ b/client/src/main/java/core/engine/renderer/TerrainRenderer.java @@ -44,6 +44,7 @@ public class TerrainRenderer { GL20.glEnableVertexAttribArray(2); GL13.glActiveTexture(GL13.GL_TEXTURE0); GL11.glBindTexture(GL11.GL_TEXTURE_2D, terrainTile.getModel().getModelTexture().getTextureID()); + shader.loadTerrainColor(terrainTile.getColor()); } private void unbindTexturedModel() { diff --git a/client/src/main/java/core/engine/shader/TerrainShader.java b/client/src/main/java/core/engine/shader/TerrainShader.java index 2c09a51..f62ec55 100644 --- a/client/src/main/java/core/engine/shader/TerrainShader.java +++ b/client/src/main/java/core/engine/shader/TerrainShader.java @@ -4,6 +4,7 @@ import core.engine.entity.Camera; import core.engine.entity.Light; import utils.MatrixGraphicUtils; import utils.vectors.Matrix4f; +import utils.vectors.Vector3f; public class TerrainShader extends ShaderProgram{ private static final String VERTEX_FILE = "src/main/java/core/engine/shader/terrainVertexShader.glsl"; @@ -14,6 +15,7 @@ public class TerrainShader extends ShaderProgram{ private int location_viewMatrix; private int location_lightPosition; private int location_lightColor; + private int location_terrainColor; public TerrainShader() { super(VERTEX_FILE, FRAGMENT_FILE); } @@ -25,6 +27,7 @@ public class TerrainShader extends ShaderProgram{ this.location_viewMatrix = super.getUniformLocation("viewMatrix"); this.location_lightColor = super.getUniformLocation("lightColor"); this.location_lightPosition = super.getUniformLocation("lightPosition"); + this.location_terrainColor = super.getUniformLocation("terrainColor"); } @Override @@ -51,4 +54,8 @@ public class TerrainShader extends ShaderProgram{ super.loadVector(location_lightPosition, light.getPosition()); super.loadVector(location_lightColor, light.getColor()); } + + public void loadTerrainColor(Vector3f color) { + super.loadVector(location_terrainColor, color); + } } diff --git a/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl b/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl index 45026bc..0a89847 100644 --- a/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl +++ b/client/src/main/java/core/engine/shader/terrainFragmentShader.glsl @@ -8,6 +8,7 @@ out vec4 out_Color; uniform sampler2D textureSampler; uniform vec3 lightColor; +uniform vec3 terrainColor; void main(void) { vec3 unitNormal = normalize(surfaceNormal); @@ -17,5 +18,5 @@ void main(void) { float brightness = max(nDotl, 0.2); vec3 diffusde = brightness * lightColor; - out_Color = texture(textureSampler, pass_textureCoords); + out_Color = /*vec4(diffusde, 1.0) **/ vec4(terrainColor, 1); } \ No newline at end of file diff --git a/client/src/main/java/core/engine/terrain/TerrainTile.java b/client/src/main/java/core/engine/terrain/TerrainTile.java index 42c9c65..936ee8c 100644 --- a/client/src/main/java/core/engine/terrain/TerrainTile.java +++ b/client/src/main/java/core/engine/terrain/TerrainTile.java @@ -13,6 +13,8 @@ public class TerrainTile { private float rotX, rotY, rotZ; private float scale; + private Vector3f color; + public TerrainTile(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale) { this.model = model; this.position = position; @@ -20,6 +22,7 @@ public class TerrainTile { this.rotY = rotY; this.rotZ = rotZ; this.scale = scale; + this.color = new Vector3f((float) Math.random(), (float) Math.random(), (float) Math.random()); } public TexturedModel getModel() { @@ -69,4 +72,12 @@ public class TerrainTile { public void setScale(float scale) { this.scale = scale; } + + public Vector3f getColor() { + return color; + } + + public void setColor(Vector3f color) { + this.color = color; + } } \ No newline at end of file From 354c5ce8be28eeedcb2773a8e6275760e2cff877 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 5 Oct 2023 13:32:13 +0200 Subject: [PATCH 9/9] Apply Noise generation --- client/src/main/java/core/engine/Engine.java | 4 +- .../java/core/engine/terrain/Terrain.java | 12 ++++-- .../core/engine/terrain/TerrainGenerator.java | 37 +++++++++++++++++++ .../java/core/engine/terrain/TerrainTile.java | 8 +++- 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 client/src/main/java/core/engine/terrain/TerrainGenerator.java diff --git a/client/src/main/java/core/engine/Engine.java b/client/src/main/java/core/engine/Engine.java index 1da8d41..9a9ae45 100644 --- a/client/src/main/java/core/engine/Engine.java +++ b/client/src/main/java/core/engine/Engine.java @@ -119,12 +119,10 @@ public class Engine { glClearColor(1.0f, 0.0f, 0.0f, 0.0f); Camera camera = new Camera(); - - Light light = new Light(new Vector3f(0,0,-20), new Vector3f(1,1,1)); //Generate Simple, Flat Terrain - Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white")), 16, 32); + Terrain terrain = new Terrain( loader, new ModelTexture(loader.loadTexture("white")), 16, 32, 7); //Create Hexagon HexagonModel hexagonModel = new HexagonModel(); diff --git a/client/src/main/java/core/engine/terrain/Terrain.java b/client/src/main/java/core/engine/terrain/Terrain.java index 387f76f..2f369ef 100644 --- a/client/src/main/java/core/engine/terrain/Terrain.java +++ b/client/src/main/java/core/engine/terrain/Terrain.java @@ -9,28 +9,32 @@ import utils.vectors.Vector3f; import java.util.ArrayList; import java.util.List; +import java.util.Random; public class Terrain { private List terrainTiles = new ArrayList<>(); - public Terrain(Loader loader, ModelTexture modelTexture, int rows, int columns) { + public Terrain(Loader loader, ModelTexture modelTexture, int rows, int columns, int numberPlayers) { + TerrainGenerator terrainGenerator = new TerrainGenerator(); + HexagonModel hexagonModel = new HexagonModel(); RawModel rawModel = loader.loadHexagon(hexagonModel); TexturedModel texturedModel = new TexturedModel(rawModel, modelTexture); for(int row = 0; row < rows; row++) { for(int column = 0; column < columns; column++) { if(row % 2 == 1) { - terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column * 2* 0.866f, 0, row * 1.5f),0,0,0,1)); - + terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column * 2* 0.866f, 0, row * 1.5f),0,0,0,1, row, column, terrainGenerator.generateColor(column, row))); } else { - terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column *2 * 0.866f - 0.866f, 0, row * 1.5f),0,0,0,1)); + terrainTiles.add(new TerrainTile(texturedModel, new Vector3f(column *2 * 0.866f - 0.866f, 0, row * 1.5f),0,0,0,1, row, column, terrainGenerator.generateColor(column, row))); } } } } + + public List getTerrainTiles() { return terrainTiles; } diff --git a/client/src/main/java/core/engine/terrain/TerrainGenerator.java b/client/src/main/java/core/engine/terrain/TerrainGenerator.java new file mode 100644 index 0000000..a1cf2d8 --- /dev/null +++ b/client/src/main/java/core/engine/terrain/TerrainGenerator.java @@ -0,0 +1,37 @@ +package core.engine.terrain; + +import utils.vectors.Vector3f; + +import java.util.Random; + +public class TerrainGenerator { + + private final Random random = new Random(); + private final int seed_red; + private final int seed_blue; + private final int seed_green; + + public TerrainGenerator() { + this.seed_red = random.nextInt(1000000000); + this.seed_blue = random.nextInt(1000000000); + this.seed_green = random.nextInt(1000000000); + } + + public Vector3f generateColor(int x, int z) { + return new Vector3f(getSmoothNoise(x, z, seed_red), getSmoothNoise(x, z, seed_green), getSmoothNoise(x, z, seed_blue)); + } + + private float getSmoothNoise(int x, int z, int seed) { + float corners = (getNoise(x -1, z-1, seed) + getNoise(x+1, z-1, seed) + + getNoise(x-1, z+1, seed) + getNoise(x+1, z+1, seed)) / 16f; + float sides = (getNoise(x-1, z, seed) + getNoise(x+1, z, seed) + + getNoise(x, z-1, seed) + getNoise(x, z+1, seed)) / 8f; + float center = getNoise(x, z, seed) / 4f; + return corners + sides + center; + } + + private float getNoise(int x, int z, int seed) { + random.setSeed(x * 49632L + z * 325176L + seed); + return random.nextFloat(); + } +} diff --git a/client/src/main/java/core/engine/terrain/TerrainTile.java b/client/src/main/java/core/engine/terrain/TerrainTile.java index 936ee8c..95a6fc5 100644 --- a/client/src/main/java/core/engine/terrain/TerrainTile.java +++ b/client/src/main/java/core/engine/terrain/TerrainTile.java @@ -12,17 +12,21 @@ public class TerrainTile { private Vector3f position; private float rotX, rotY, rotZ; private float scale; + private int row; + private int column; private Vector3f color; - public TerrainTile(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale) { + public TerrainTile(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale, int row, int column, Vector3f color) { this.model = model; this.position = position; this.rotX = rotX; this.rotY = rotY; this.rotZ = rotZ; this.scale = scale; - this.color = new Vector3f((float) Math.random(), (float) Math.random(), (float) Math.random()); + this.row = row; + this.column = column; + this.color = color; } public TexturedModel getModel() {