Render random colorized TerrainTiles

This commit is contained in:
Sebastian Böckelmann 2024-03-21 18:10:23 +01:00
parent 11f5fa99fe
commit 2464231d41
6 changed files with 25 additions and 15 deletions

View File

@ -4,7 +4,7 @@ import utils.vectors.Vector3f;
public class Camera { public class Camera {
private Vector3f position = new Vector3f(0,2,0); private Vector3f position = new Vector3f(0,50,0);
private float pitch = 90; private float pitch = 90;
private float yaw = 180; private float yaw = 180;
private float roll; private float roll;

View File

@ -40,19 +40,17 @@ public class TerrainRenderer {
for(TerrainTile terrainTile : terrainTiles) { for(TerrainTile terrainTile : terrainTiles) {
prepareTexturedModel(terrainTile.getModel()); prepareTexturedModel(terrainTile.getModel());
prepareInstance(terrainTile); prepareInstance(terrainTile);
GL11.glDrawElements(GL11.GL_TRIANGLES, terrainTile.getModel().getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); shader.loadColor(terrainTile.getColor());
GL11.glDrawElements(GL11.GL_TRIANGLES, terrainTile.getModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0);
} }
unbindTexturedModel(); unbindTexturedModel();
} }
private void prepareTexturedModel(TexturedModel model) { private void prepareTexturedModel(RawModel model) {
RawModel rawModel = model.getRawModel(); GL30.glBindVertexArray(model.getVaoID());
GL30.glBindVertexArray(rawModel.getVaoID());
GL20.glEnableVertexAttribArray(0); GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1); GL20.glEnableVertexAttribArray(1);
GL20.glEnableVertexAttribArray(2); GL20.glEnableVertexAttribArray(2);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getModelTexture().getTextureID());
} }
private void unbindTexturedModel() { private void unbindTexturedModel() {

View File

@ -4,6 +4,7 @@ import core.engine.entity.Camera;
import core.engine.entity.Light; import core.engine.entity.Light;
import utils.MatrixGraphicUtils; import utils.MatrixGraphicUtils;
import utils.vectors.Matrix4f; import utils.vectors.Matrix4f;
import utils.vectors.Vector3f;
public class TerrainShader extends ShaderProgram{ public class TerrainShader extends ShaderProgram{
private static final String VERTEX_FILE = "src/main/java/core/engine/shader/terrainVertexShader.glsl"; 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_viewMatrix;
private int location_lightPosition; private int location_lightPosition;
private int location_lightColor; private int location_lightColor;
private int location_color;
public TerrainShader() { public TerrainShader() {
super(VERTEX_FILE, FRAGMENT_FILE); super(VERTEX_FILE, FRAGMENT_FILE);
} }
@ -25,6 +27,7 @@ public class TerrainShader extends ShaderProgram{
this.location_viewMatrix = super.getUniformLocation("viewMatrix"); this.location_viewMatrix = super.getUniformLocation("viewMatrix");
this.location_lightColor = super.getUniformLocation("lightColor"); this.location_lightColor = super.getUniformLocation("lightColor");
this.location_lightPosition = super.getUniformLocation("lightPosition"); this.location_lightPosition = super.getUniformLocation("lightPosition");
this.location_color = super.getUniformLocation("color");
} }
@Override @Override
@ -51,4 +54,8 @@ public class TerrainShader extends ShaderProgram{
super.loadVector(location_lightPosition, light.getPosition()); super.loadVector(location_lightPosition, light.getPosition());
super.loadVector(location_lightColor, light.getColor()); super.loadVector(location_lightColor, light.getColor());
} }
public void loadColor(Vector3f color) {
super.loadVector(location_color, color);
}
} }

View File

@ -1,13 +1,12 @@
#version 400 core #version 400 core
in vec2 pass_textureCoords;
in vec3 surfaceNormal; in vec3 surfaceNormal;
in vec3 toLightVector; in vec3 toLightVector;
out vec4 out_Color; out vec4 out_Color;
uniform sampler2D textureSampler;
uniform vec3 lightColor; uniform vec3 lightColor;
uniform vec3 color;
void main(void) { void main(void) {
vec3 unitNormal = normalize(surfaceNormal); vec3 unitNormal = normalize(surfaceNormal);
@ -17,5 +16,5 @@ void main(void) {
float brightness = max(nDotl, 0.2); float brightness = max(nDotl, 0.2);
vec3 diffusde = brightness * lightColor; vec3 diffusde = brightness * lightColor;
out_Color = vec4(1,1,1,1); out_Color = vec4(color,1);
} }

View File

@ -33,10 +33,10 @@ public class Terrain {
if(y % 2 == 0) { if(y % 2 == 0) {
xPos -= 0.866f; xPos -= 0.866f;
} }
generatedTerrainTiles.add(new TerrainTile(hexagontexturedModel, new Vector3f(xPos , 0, y * -1.4999994f), 0, 0, 0,1)); Vector3f randomColor = new Vector3f((float) Math.random(), (float) Math.random(), (float) Math.random());
generatedTerrainTiles.add(new TerrainTile(hexagonRawModel, new Vector3f(xPos , 0, y * -1.4999994f), 0, 0, 0,1, randomColor));
} }
} }
generatedTerrainTiles.add(new TerrainTile(hexagontexturedModel, new Vector3f(0 , 0, 0), 0, 0, 0,1));
System.out.println(31 * 1.7319988f); System.out.println(31 * 1.7319988f);

View File

@ -8,21 +8,23 @@ import utils.vectors.Vector3f;
public class TerrainTile { public class TerrainTile {
private TexturedModel model; private RawModel model;
private final Vector3f position; private final Vector3f position;
private final float rotX, rotY, rotZ; private final float rotX, rotY, rotZ;
private final float scale; private final float scale;
private Vector3f color;
public TerrainTile(TexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale) { public TerrainTile(RawModel model, Vector3f position, float rotX, float rotY, float rotZ, float scale, Vector3f color) {
this.model = model; this.model = model;
this.position = position; this.position = position;
this.rotX = rotX; this.rotX = rotX;
this.rotY = rotY; this.rotY = rotY;
this.rotZ = rotZ; this.rotZ = rotZ;
this.scale = scale; this.scale = scale;
this.color = color;
} }
public TexturedModel getModel() { public RawModel getModel() {
return model; return model;
} }
@ -45,4 +47,8 @@ public class TerrainTile {
public float getScale() { public float getScale() {
return scale; return scale;
} }
public Vector3f getColor() {
return color;
}
} }