Forráskód Böngészése

Animation system now working, fixed VAO creation

Tankernn 8 éve
szülő
commit
d98cc54182

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/TankernnGame3D.java

@@ -61,8 +61,8 @@ public class TankernnGame3D extends TankernnGame {
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
-		this.sky = new Skybox(loader, Texture.newCubeMap(InternalFile.fromFilenames("skybox", dayTextures, "png"), 200),
-				Texture.newCubeMap(InternalFile.fromFilenames("skybox", nightTextures, "png"), 200), 400);
+		this.sky = new Skybox(loader, Texture.newCubeMap(InternalFile.fromFilenames("skybox", dayTextures, "png"), 400),
+				Texture.newCubeMap(InternalFile.fromFilenames("skybox", nightTextures, "png"), 400), 400);
 		camera = new Camera();
 		renderer = new MasterRenderer(loader, camera, sky);
 		try {

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/animation/loaders/AnimatedModelLoader.java

@@ -63,8 +63,8 @@ public class AnimatedModelLoader {
 		vao.createAttribute(0, data.getVertices(), 3);
 		vao.createAttribute(1, data.getTextureCoords(), 2);
 		vao.createAttribute(2, data.getNormals(), 3);
-		vao.createIntAttribute(3, data.getJointIds(), 3);
-		vao.createAttribute(4, data.getVertexWeights(), 3);
+		vao.createIntAttribute(4, data.getJointIds(), 3);
+		vao.createAttribute(5, data.getVertexWeights(), 3);
 		vao.unbind();
 		return vao;
 	}

+ 0 - 87
src/main/java/eu/tankernn/gameEngine/animation/renderer/AnimatedModelRenderer.java

@@ -1,87 +0,0 @@
-package eu.tankernn.gameEngine.animation.renderer;
-
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.util.vector.Vector3f;
-
-import eu.tankernn.gameEngine.animation.animatedModel.AnimatedModel;
-import eu.tankernn.gameEngine.util.ICamera;
-import eu.tankernn.gameEngine.util.OpenGlUtils;
-
-
-/**
- * 
- * This class deals with rendering an animated entity. Nothing particularly new
- * here. The only exciting part is that the joint transforms get loaded up to
- * the shader in a uniform array.
- * 
- * @author Karl
- *
- */
-public class AnimatedModelRenderer {
-
-	private AnimatedModelShader shader;
-
-	/**
-	 * Initializes the shader program used for rendering animated models.
-	 */
-	public AnimatedModelRenderer() {
-		this.shader = new AnimatedModelShader();
-	}
-
-	/**
-	 * Renders an animated entity. The main thing to note here is that all the
-	 * joint transforms are loaded up to the shader to a uniform array. Also 5
-	 * attributes of the VAO are enabled before rendering, to include joint
-	 * indices and weights.
-	 * 
-	 * @param entity
-	 *            - the animated entity to be rendered.
-	 * @param camera
-	 *            - the camera used to render the entity.
-	 * @param lightDir
-	 *            - the direction of the light in the scene.
-	 */
-	public void render(AnimatedModel entity, ICamera camera, Vector3f lightDir) {
-		prepare(camera, lightDir);
-		entity.getTexture().getTexture().bindToUnit(0);
-		entity.getModel().bind(0, 1, 2, 3, 4);
-		shader.jointTransforms.loadMatrixArray(entity.getJointTransforms());
-		GL11.glDrawElements(GL11.GL_TRIANGLES, entity.getModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
-		entity.getModel().unbind(0, 1, 2, 3, 4);
-		finish();
-	}
-
-	/**
-	 * Deletes the shader program when the game closes.
-	 */
-	public void cleanUp() {
-		shader.cleanUp();
-	}
-
-	/**
-	 * Starts the shader program and loads up the projection view matrix, as
-	 * well as the light direction. Enables and disables a few settings which
-	 * should be pretty self-explanatory.
-	 * 
-	 * @param camera
-	 *            - the camera being used.
-	 * @param lightDir
-	 *            - the direction of the light in the scene.
-	 */
-	private void prepare(ICamera camera, Vector3f lightDir) {
-		shader.start();
-		shader.projectionViewMatrix.loadMatrix(camera.getProjectionViewMatrix());
-		shader.lightDirection.loadVec3(lightDir);
-		OpenGlUtils.antialias(true);
-		OpenGlUtils.disableBlending();
-		OpenGlUtils.enableDepthTesting(true);
-	}
-
-	/**
-	 * Stops the shader program after rendering the entity.
-	 */
-	private void finish() {
-		shader.stop();
-	}
-
-}

+ 0 - 44
src/main/java/eu/tankernn/gameEngine/animation/renderer/AnimatedModelShader.java

@@ -1,44 +0,0 @@
-package eu.tankernn.gameEngine.animation.renderer;
-
-import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
-import eu.tankernn.gameEngine.renderEngine.shaders.UniformMat4Array;
-import eu.tankernn.gameEngine.renderEngine.shaders.UniformMatrix;
-import eu.tankernn.gameEngine.renderEngine.shaders.UniformSampler;
-import eu.tankernn.gameEngine.renderEngine.shaders.UniformVec3;
-
-public class AnimatedModelShader extends ShaderProgram {
-
-	private static final int MAX_JOINTS = 50;// max number of joints in a skeleton
-	private static final int DIFFUSE_TEX_UNIT = 0;
-
-	private static final String VERTEX_SHADER = "/eu/tankernn/gameEngine/animation/renderer/animatedEntityVertex.glsl";
-	private static final String FRAGMENT_SHADER = "/eu/tankernn/gameEngine/animation/renderer/animatedEntityFragment.glsl";
-
-	protected UniformMatrix projectionViewMatrix = new UniformMatrix("projectionViewMatrix");
-	protected UniformVec3 lightDirection = new UniformVec3("lightDirection");
-	protected UniformMat4Array jointTransforms = new UniformMat4Array("jointTransforms", MAX_JOINTS);
-	private UniformSampler diffuseMap = new UniformSampler("diffuseMap");
-
-	/**
-	 * Creates the shader program for the {@link AnimatedModelRenderer} by
-	 * loading up the vertex and fragment shader code files. It also gets the
-	 * location of all the specified uniform variables, and also indicates that
-	 * the diffuse texture will be sampled from texture unit 0.
-	 */
-	public AnimatedModelShader() {
-		super(VERTEX_SHADER, FRAGMENT_SHADER, "in_position", "in_textureCoords", "in_normal", "in_jointIndices",
-				"in_weights");
-		super.storeAllUniformLocations(projectionViewMatrix, diffuseMap, lightDirection, jointTransforms);
-		connectTextureUnits();
-	}
-
-	/**
-	 * Indicates which texture unit the diffuse texture should be sampled from.
-	 */
-	private void connectTextureUnits() {
-		super.start();
-		diffuseMap.loadTexUnit(DIFFUSE_TEX_UNIT);
-		super.stop();
-	}
-
-}

+ 0 - 20
src/main/java/eu/tankernn/gameEngine/animation/renderer/animatedEntityFragment.glsl

@@ -1,20 +0,0 @@
-#version 150
-
-const vec2 lightBias = vec2(0.7, 0.6);//just indicates the balance between diffuse and ambient lighting
-
-in vec2 pass_textureCoords;
-in vec3 pass_normal;
-
-out vec4 out_colour;
-
-uniform sampler2D diffuseMap;
-uniform vec3 lightDirection;
-
-void main(void){
-	
-	vec4 diffuseColour = texture(diffuseMap, pass_textureCoords);		
-	vec3 unitNormal = normalize(pass_normal);
-	float diffuseLight = max(dot(-lightDirection, unitNormal), 0.0) * lightBias.x + lightBias.y;
-	out_colour = diffuseColour * diffuseLight;
-	
-}

+ 0 - 36
src/main/java/eu/tankernn/gameEngine/animation/renderer/animatedEntityVertex.glsl

@@ -1,36 +0,0 @@
-#version 150
-
-const int MAX_JOINTS = 50;//max joints allowed in a skeleton
-const int MAX_WEIGHTS = 3;//max number of joints that can affect a vertex
-
-in vec3 in_position;
-in vec2 in_textureCoords;
-in vec3 in_normal;
-in ivec3 in_jointIndices;
-in vec3 in_weights;
-
-out vec2 pass_textureCoords;
-out vec3 pass_normal;
-
-uniform mat4 jointTransforms[MAX_JOINTS];
-uniform mat4 projectionViewMatrix;
-
-void main(void){
-	
-	vec4 totalLocalPos = vec4(0.0);
-	vec4 totalNormal = vec4(0.0);
-	
-	for(int i=0;i<MAX_WEIGHTS;i++){
-		mat4 jointTransform = jointTransforms[in_jointIndices[i]];
-		vec4 posePosition = jointTransform * vec4(in_position, 1.0);
-		totalLocalPos += posePosition * in_weights[i];
-		
-		vec4 worldNormal = jointTransform * vec4(in_normal, 0.0);
-		totalNormal += worldNormal * in_weights[i];
-	}
-	
-	gl_Position = projectionViewMatrix * totalLocalPos;
-	pass_normal = totalNormal.xyz;
-	pass_textureCoords = in_textureCoords;
-
-}

+ 6 - 7
src/main/java/eu/tankernn/gameEngine/loader/Loader.java

@@ -107,11 +107,10 @@ public class Loader {
 	}
 	
 	public Vao loadToVAO(float[] positions, int dimensions) {
-		Vao vao = Vao.create();
-		vao.bind();
-		vao.createAttribute(0, positions, dimensions);
-		vao.unbind();
-		return vao;
+		int vaoID = createVAO();
+		storeDataInAttributeList(0, dimensions, positions);
+		unbindVAO();
+		return new Vao(vaoID, positions.length / 2);
 	}
 	
 	public Vao loadToVAO(ModelData data) {
@@ -212,8 +211,8 @@ public class Loader {
 		return this.loadToVAO(data);
 	}
 	
-	public AnimatedModel loadDAE(InternalFile colladaFile) {
-		return AnimatedModelLoader.loadEntity(colladaFile, new ModelTexture(textures.get(0)));
+	public AnimatedModel loadDAE(InternalFile colladaFile, ModelTexture texture) {
+		return AnimatedModelLoader.loadEntity(colladaFile, texture);
 	}
 	
 	public void readModelSpecification(InternalFile file) throws IOException {

+ 0 - 1
src/main/java/eu/tankernn/gameEngine/loader/obj/Vertex.java

@@ -28,7 +28,6 @@ public class Vertex {
 		tangents.add(tangent);
 	}
 	
-	//NEW
 	protected Vertex duplicate(int newIndex){
 		Vertex vertex = new Vertex(newIndex, position);
 		vertex.tangents = this.tangents;

+ 6 - 1
src/main/java/eu/tankernn/gameEngine/renderEngine/Vao.java

@@ -22,10 +22,15 @@ public class Vao {
 		return new Vao(id);
 	}
 
-	protected Vao(int id) {
+	private Vao(int id) {
 		this.id = id;
 	}
 	
+	public Vao(int id, int indexCount) {
+		this(id);
+		this.indexCount = indexCount;
+	}
+
 	public int getIndexCount(){
 		return indexCount;
 	}

+ 20 - 15
src/main/java/eu/tankernn/gameEngine/renderEngine/entities/EntityRenderer.java

@@ -13,7 +13,6 @@ import org.lwjgl.util.vector.Vector3f;
 import org.lwjgl.util.vector.Vector4f;
 
 import eu.tankernn.gameEngine.animation.animatedModel.AnimatedModel;
-import eu.tankernn.gameEngine.animation.renderer.AnimatedModelRenderer;
 import eu.tankernn.gameEngine.entities.Entity3D;
 import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.loader.models.TexturedModel;
@@ -22,6 +21,7 @@ import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.renderEngine.MasterRenderer;
 import eu.tankernn.gameEngine.util.ICamera;
 import eu.tankernn.gameEngine.util.Maths;
+import eu.tankernn.gameEngine.util.OpenGlUtils;
 
 /**
  * Renderer for entities.
@@ -29,8 +29,6 @@ import eu.tankernn.gameEngine.util.Maths;
  * @author Frans
  */
 public class EntityRenderer<S extends EntityShader> {
-	private AnimatedModelRenderer animatedRenderer;
-	
 	protected S shader;
 	
 	/**
@@ -51,7 +49,6 @@ public class EntityRenderer<S extends EntityShader> {
 		shader.projectionMatrix.loadMatrix(projectionMatrix);
 		shader.connectTextureUnits();
 		shader.stop();
-		animatedRenderer = new AnimatedModelRenderer();
 	}
 	
 	/**
@@ -62,6 +59,9 @@ public class EntityRenderer<S extends EntityShader> {
 	 *        applying shadows.
 	 */
 	public void render(Map<TexturedModel, List<Entity3D>> entities, Matrix4f toShadowSpace, ICamera cam, Vector4f clipPlane, List<Light> lights, Texture environmentMap) {
+		OpenGlUtils.antialias(true);
+		OpenGlUtils.disableBlending();
+		OpenGlUtils.enableDepthTesting(true);
 		shader.start();
 		shader.plane.loadVec4(clipPlane);
 		shader.skyColor.loadVec3(RED, GREEN, BLUE);
@@ -72,16 +72,15 @@ public class EntityRenderer<S extends EntityShader> {
 		shader.cameraPosition.loadVec3(cam.getPosition());
 		for (TexturedModel model: entities.keySet()) {
 			if (model instanceof AnimatedModel)
-				animatedRenderer.render((AnimatedModel) model, cam, lights.get(0).getPosition());
-			else {
-				prepareTexturedModel(model, environmentMap);
-				List<Entity3D> batch = entities.get(model);
-				for (Entity3D entity: batch) {
-					prepareInstance(entity, model);
-					GL11.glDrawElements(GL11.GL_TRIANGLES, model.getModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
-				}
-				unbindTexturedModel(model);
+				shader.jointTransforms.loadMatrixArray(((AnimatedModel) model).getJointTransforms());
+			prepareTexturedModel(model, environmentMap);
+			List<Entity3D> batch = entities.get(model);
+			for (Entity3D entity: batch) {
+				prepareInstance(entity, model);
+				GL11.glDrawElements(GL11.GL_TRIANGLES, model.getModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
 			}
+			unbindTexturedModel(model);
+			
 		}
 		shader.stop();
 	}
@@ -91,7 +90,10 @@ public class EntityRenderer<S extends EntityShader> {
 	}
 	
 	private void prepareTexturedModel(TexturedModel model, Texture environmentMap) {
-		model.getModel().bind(0, 1, 2, 3);
+		if (model instanceof AnimatedModel)
+			model.getModel().bind(0, 1, 2, 4, 5);
+		else
+			model.getModel().bind(0, 1, 2, 3);
 		ModelTexture texture = model.getTexture();
 		shader.numberOfRows.loadFloat(texture.getNumberOfRows());
 		if (texture.hasTransparency())
@@ -117,7 +119,10 @@ public class EntityRenderer<S extends EntityShader> {
 	
 	private void unbindTexturedModel(TexturedModel model) {
 		MasterRenderer.enableCulling();
-		model.getModel().unbind(0, 1, 2, 3);
+		if (model instanceof AnimatedModel)
+			model.getModel().unbind(0, 1, 2, 4, 5);
+		else
+			model.getModel().unbind(0, 1, 2, 3);
 	}
 	
 	protected void prepareInstance(Entity3D entity, TexturedModel model) {

+ 6 - 3
src/main/java/eu/tankernn/gameEngine/renderEngine/entities/EntityShader.java

@@ -10,6 +10,7 @@ import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.renderEngine.shaders.ShaderProgram;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformBoolean;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformFloat;
+import eu.tankernn.gameEngine.renderEngine.shaders.UniformMat4Array;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformMatrix;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformSampler;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformVec2;
@@ -18,7 +19,8 @@ import eu.tankernn.gameEngine.renderEngine.shaders.UniformVec4;
 import eu.tankernn.gameEngine.renderEngine.shaders.UniformViewMatrix;
 
 public class EntityShader extends ShaderProgram {
-
+	private static final int MAX_JOINTS = 50;// max number of joints in a skeleton
+	
 	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/renderEngine/entities/vertexShader.glsl";
 	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/renderEngine/entities/fragmentShader.glsl";
 
@@ -42,13 +44,14 @@ public class EntityShader extends ShaderProgram {
 	protected UniformSampler enviroMap = new UniformSampler("enviroMap");
 	protected UniformSampler normalMap = new UniformSampler("normalMap");
 	public UniformBoolean usesNormalMap = new UniformBoolean("usesNormalMap");
+	protected UniformMat4Array jointTransforms = new UniformMat4Array("jointTransforms", MAX_JOINTS);
 
 	public EntityShader() {
-		super(VERTEX_FILE, FRAGMENT_FILE, "position", "textureCoords", "normal", "tangent");
+		super(VERTEX_FILE, FRAGMENT_FILE, "position", "textureCoords", "normal", "tangent", "in_jointIndices", "in_weights");
 		super.getLightUniformLocations();
 		super.storeAllUniformLocations(transformationMatrix, projectionMatrix, viewMatrix, shineDamper, reflectivity,
 				refractivity, useFakeLighting, skyColor, numberOfRows, offset, plane, toShadowMapSpace, shadowMap,
-				specularMap, usesSpecularMap, modelTexture, cameraPosition, enviroMap, normalMap, usesNormalMap);
+				specularMap, usesSpecularMap, modelTexture, cameraPosition, enviroMap, normalMap, usesNormalMap, jointTransforms);
 	}
 
 	public EntityShader(String vertexFile, String fragmentFile, String... string) {

+ 23 - 3
src/main/java/eu/tankernn/gameEngine/renderEngine/entities/vertexShader.glsl

@@ -1,9 +1,14 @@
 #version 400 core
 
+const int MAX_JOINTS = 50;//max joints allowed in a skeleton
+const int MAX_WEIGHTS = 3;//max number of joints that can affect a vertex
+
 in vec3 position;
 in vec2 textureCoords;
 in vec3 normal;
 in vec3 tangent;
+in ivec3 in_jointIndices;
+in vec3 in_weights;
 
 out vec2 pass_textureCoords;
 out vec3 surfaceNormal;
@@ -35,16 +40,31 @@ const float gradient = 2.0;
 
 uniform vec4 plane;
 
+uniform mat4 jointTransforms[MAX_JOINTS];
+
 void main(void) {
-	vec4 worldPosition = transformationMatrix * vec4(position, 1.0);
+	
+	vec4 totalLocalPos = vec4(0.0);
+	vec4 totalNormal = vec4(0.0);
+	
+	for(int i=0;i<MAX_WEIGHTS;i++){
+		mat4 jointTransform = jointTransforms[in_jointIndices[i]];
+		vec4 posePosition = jointTransform * vec4(position, 1.0);
+		totalLocalPos += posePosition * in_weights[i];
+		
+		vec4 worldNormal = jointTransform * vec4(normal, 0.0);
+		totalNormal += worldNormal * in_weights[i];
+	}
+	
+	vec4 worldPosition = transformationMatrix * totalLocalPos;
 	gl_ClipDistance[0] = dot(worldPosition, plane);
 	shadowCoords = toShadowMapSpace * worldPosition;
 	mat4 modelViewMatrix = viewMatrix * transformationMatrix;
-	vec4 positionRelativeToCam = modelViewMatrix * vec4(position, 1.0);
+	vec4 positionRelativeToCam = modelViewMatrix * totalLocalPos;
 	gl_Position = projectionMatrix * positionRelativeToCam;
 	pass_textureCoords = (textureCoords / numberOfRows) + offset;
 
-	vec3 actualNormal = normal;
+	vec3 actualNormal = totalNormal.xyz;
 	if (useFakeLighting > 0.5) {
 		actualNormal = vec3(0.0, 1.0, 0.0);
 	}

+ 22 - 26
src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/ShadowMapEntityRenderer.java

@@ -16,39 +16,36 @@ import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.Maths;
 
 public class ShadowMapEntityRenderer {
-
+	
 	private Matrix4f projectionViewMatrix;
 	private ShadowShader shader;
-
+	
 	/**
-	 * @param shader
-	 *            - the simple shader program being used for the shadow render
-	 *            pass.
-	 * @param projectionViewMatrix
-	 *            - the orthographic projection matrix multiplied by the light's
-	 *            "view" matrix.
+	 * @param shader - the simple shader program being used for the shadow
+	 *        render pass.
+	 * @param projectionViewMatrix - the orthographic projection matrix
+	 *        multiplied by the light's "view" matrix.
 	 */
 	protected ShadowMapEntityRenderer(ShadowShader shader, Matrix4f projectionViewMatrix) {
 		this.shader = shader;
 		this.projectionViewMatrix = projectionViewMatrix;
 	}
-
+	
 	/**
 	 * Renders entieis to the shadow map. Each model is first bound and then all
 	 * of the entities using that model are rendered to the shadow map.
 	 * 
-	 * @param entities
-	 *            - the entities to be rendered to the shadow map.
+	 * @param entities - the entities to be rendered to the shadow map.
 	 */
 	protected void render(Map<TexturedModel, List<Entity3D>> entities) {
-		for (TexturedModel model : entities.keySet()) {
+		for (TexturedModel model: entities.keySet()) {
 			Vao rawModel = model.getModel();
 			bindModel(rawModel);
 			model.getTexture().getTexture().bindToUnit(0);
 			if (model.getTexture().hasTransparency()) {
 				MasterRenderer.disableCulling();
 			}
-			for (Entity3D entity : entities.get(model)) {
+			for (Entity3D entity: entities.get(model)) {
 				prepareInstance(entity);
 				GL11.glDrawElements(GL11.GL_TRIANGLES, rawModel.getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
 			}
@@ -57,36 +54,35 @@ public class ShadowMapEntityRenderer {
 			}
 		}
 		GL20.glDisableVertexAttribArray(0);
+		GL20.glDisableVertexAttribArray(1);
 		GL30.glBindVertexArray(0);
 	}
-
+	
 	/**
-	 * Binds a raw model before rendering. Only the attribute 0 is enabled here
-	 * because that is where the positions are stored in the VAO, and only the
-	 * positions are required in the vertex shader.
+	 * Binds a raw model before rendering. Only the attribute 0 and 1 are
+	 * enabled here because that is where the positions and texture coordinates
+	 * are stored in the VAO. The texture coordinates are used to determine
+	 * whether the entity is transparent or not.
 	 * 
-	 * @param rawModel
-	 *            - the model to be bound.
+	 * @param rawModel - the model to be bound.
 	 */
 	private void bindModel(Vao rawModel) {
-		rawModel.bind(0);
+		rawModel.bind(0, 1);
 	}
-
+	
 	/**
 	 * Prepares an entity to be rendered. The model matrix is created in the
 	 * usual way and then multiplied with the projection and view matrix (often
 	 * in the past we've done this in the vertex shader) to create the
 	 * mvp-matrix. This is then loaded to the vertex shader as a uniform.
 	 * 
-	 * @param entity
-	 *            - the entity to be prepared for rendering.
+	 * @param entity - the entity to be prepared for rendering.
 	 */
 	private void prepareInstance(Entity3D entity) {
 		Vector3f rot = entity.getRotation();
-		Matrix4f modelMatrix = Maths.createTransformationMatrix(entity.getPosition(), rot.x, rot.y, rot.z,
-				entity.getScale());
+		Matrix4f modelMatrix = Maths.createTransformationMatrix(entity.getPosition(), rot.x, rot.y, rot.z, entity.getScale());
 		Matrix4f mvpMatrix = Matrix4f.mul(projectionViewMatrix, modelMatrix, null);
 		shader.mvpMatrix.loadMatrix(mvpMatrix);
 	}
-
+	
 }

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/shadowFragmentShader.glsl

@@ -4,7 +4,7 @@ in vec2 textureCoords;
 
 out vec4 out_colour;
 
-uniform sampler2D modelTexture;//will use this next week
+uniform sampler2D modelTexture;
 
 void main(void){