diff --git a/Shaders/Projector/Projector.frag b/Shaders/Projector/Projector.frag
index cafa84e149e79bfb0da127a1ea90efc5ae4a007d..b4fc7338a4b90020d82c35dccc7dd9707f41a293 100644
--- a/Shaders/Projector/Projector.frag
+++ b/Shaders/Projector/Projector.frag
@@ -1,19 +1,59 @@
 #version 330 core
-uniform sampler2D image;
 
 out vec4 FragColor;
 
-in vec4 TexCoords;
+struct Material
+{
+    sampler2D diffuse;
+    sampler2D specular;    
+    float shininess;
+}; 
+
+struct Light
+{
+    vec3 position;
+
+    vec3 ambient;
+    vec3 diffuse;
+    vec3 specular;
+};
+
+in vec3 FragPos;  
+in vec3 Normal;  
+in vec2 TexCoords;
+in vec4 ProjTexCoords;
+  
+uniform vec3 viewPos;
+uniform Material material;
+uniform Light light;
+uniform sampler2D projImage;
 
 void main (void)
 {
-	vec4 final_color;
-    if( TexCoords.q > 0.0 )
+	// ambient
+	vec3 ambient = light.ambient * texture(material.diffuse, TexCoords).rgb;
+
+	// diffuse 
+    vec3 norm = normalize(Normal);
+    vec3 lightDir = normalize(light.position - FragPos);
+    float diff = max(dot(norm, lightDir), 0.0);
+    vec3 diffuse = light.diffuse * diff * texture(material.diffuse, TexCoords).rgb;
+
+    // specular
+    vec3 viewDir = normalize(viewPos - FragPos);
+    vec3 reflectDir = reflect(-lightDir, norm);  
+    float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);
+    vec3 specular = light.specular * spec * texture(material.specular, TexCoords).rgb;  
+
+	vec4 result = vec4(ambient + diffuse + specular, 1.0);
+	
+	vec4 projColor;
+    if( ProjTexCoords.q > 0.0 )
     {    
-		vec2 finalCoords = TexCoords.st / TexCoords.q;
-		vec4 ProjMapColor_forCam1 = texture(image, finalCoords);
-		final_color = ProjMapColor_forCam1;			
+		vec2 finalCoords = ProjTexCoords.st / ProjTexCoords.q;
+		vec4 ProjMapColor_forCam1 = texture(projImage, finalCoords);
+		projColor = ProjMapColor_forCam1;			
     }
 
-    FragColor = final_color;
+    FragColor = mix(result, projColor, 0.4f);
 }
\ No newline at end of file
diff --git a/Shaders/Projector/Projector.vert b/Shaders/Projector/Projector.vert
index 0082afb510821ea7eabedabc7fb56d82b627c880..3ef7c9dfd1ceb0b0a1f5444d52736d6000756618 100644
--- a/Shaders/Projector/Projector.vert
+++ b/Shaders/Projector/Projector.vert
@@ -1,20 +1,34 @@
 #version 330 core
 layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec3 aNormal;
+layout (location = 2) in vec2 aTexCoords;
 
-out vec4 TexCoords;
+out vec4 ProjTexCoords;
+
+out vec3 FragPos;
+out vec3 Normal;
+out vec2 TexCoords;
+
+uniform mat4 projectorBias;
+uniform mat4 projectorProjection;
+uniform mat4 projectorView;
 
-uniform mat4 TexGenMatCam0;
 uniform mat4 model;
 uniform mat4 view;
 uniform mat4 projection;
 
 void main()
-{	
-	vec3 FragPos = vec3(model * vec4(aPos, 1.0));
-	vec4 VertexPos_eye =  model * view * vec4(aPos, 1.0);
-	vec4 VertexPos_world = inverse(view) * VertexPos_eye;
-		
-	TexCoords = TexGenMatCam0 * VertexPos_world;
-
+{		
+	FragPos = vec3(model * vec4(aPos, 1.0));
+	Normal = mat3(transpose(inverse(model))) * aNormal; 
+	TexCoords = aTexCoords;
+	
+	mat4 InvViewMat = inverse(view);
+	mat4 TexGenMatCam0 = projectorBias * projectorProjection * projectorView;
+	
+	vec4 posEye = view * model * vec4(aPos, 1.0);
+	
+	ProjTexCoords = TexGenMatCam0 * posEye;
+	
 	gl_Position = projection * view * vec4(FragPos, 1.0);
 }
\ No newline at end of file