diff --git a/QtMeshViewer/Resources/fshader.glsl b/QtMeshViewer/Resources/fshader.glsl
index f1145ddd25f56a9de4362a2e6563a6b9b3f8976b..f855a853b7f2f10922f59c11fb56e2aaad9d9ed1 100644
--- a/QtMeshViewer/Resources/fshader.glsl
+++ b/QtMeshViewer/Resources/fshader.glsl
@@ -4,21 +4,37 @@ precision mediump int;
 precision mediump float;
 #endif
 
+uniform mat3 n_matrix;
 uniform sampler2D texture;
 
+uniform struct Light {
+    vec3 position;
+    vec3 intensities;
+} light;
+
 uniform bool b_transparent;
 
 varying vec2 v_texcoord;
+varying vec4 v_position;
+varying vec3 v_normal;
 
 void main()
 {
+    
+    vec3 normal = normalize(n_matrix * v_normal);
+
+    vec3 surfaceToLight = light.position - v_position;
+    
+    float brightness = dot(normal, surfaceToLight) / (length(surfaceToLight) * length(normal));
+    brightness = clamp(brightness, 0, 1);
+
 	// Set fragment color from texture
-	vec4 finalColor = vec4(texture2D(texture, v_texcoord));
+	vec4 surfaceColor = vec4(texture2D(texture, v_texcoord));
 
 	if(!b_transparent)
 	{
-		finalColor.a = 1.0f;
+		surfaceColor.a = 1.0f;
 	}
 
-	gl_FragColor = finalColor;
+	gl_FragColor = vec4(brightness * light.intensities * surfaceColor.rgb, surfaceColor.a);
 }