diff --git a/f_shader.glsl b/f_shader.glsl index a26bf41..dd010e0 100644 --- a/f_shader.glsl +++ b/f_shader.glsl @@ -2,7 +2,7 @@ uniform vec4 ambient, diffuse, specular; uniform float shininess; -varying vec3 eye_pos_i; +varying vec3 pos_i; varying vec3 normal_i; void main(void) @@ -11,7 +11,7 @@ void main(void) vec4 color; float NdotL, RdotEye; - lightDir = vec3(-0.1, 0, -0.9); + lightDir = normalize(vec3(-0.1, 0, -0.9)); color = ambient; /* ambient light */ n = normalize(normal_i); @@ -22,10 +22,10 @@ void main(void) /* diffuse component */ color += diffuse * NdotL; /* specular component */ - RdotEye = dot(normalize(eye_pos_i), normalize(reflect(-lightDir, n))); + RdotEye = dot(normalize(-pos_i), normalize(reflect(-lightDir, n))); if (RdotEye > 0.0) { - color += specular * pow(RdotEye, shininess); + color += clamp(specular * pow(RdotEye, shininess), 0.0, 1.0); } } diff --git a/v_shader.glsl b/v_shader.glsl index efb7e85..6fde1ce 100644 --- a/v_shader.glsl +++ b/v_shader.glsl @@ -2,12 +2,12 @@ attribute vec3 pos; attribute vec3 normal; -varying vec3 eye_pos_i; +varying vec3 pos_i; varying vec3 normal_i; void main(void) { gl_Position = gl_ModelViewProjectionMatrix * vec4(pos, 1); - eye_pos_i = vec3(gl_Position.x, gl_Position.y, gl_Position.z); + pos_i = vec3(gl_Position.x, gl_Position.y, gl_Position.z); normal_i = gl_NormalMatrix * normal; }