uniform vec4 ambient, diffuse, specular; uniform float shininess; varying vec3 eye_pos_i; varying vec3 normal_i; void main(void) { vec3 n, lightDir; vec4 color; float NdotL, RdotEye; lightDir = vec3(-0.1, 0, -0.9); color = ambient; /* ambient light */ n = normalize(normal_i); NdotL = max(dot(n, -lightDir), 0.0); if (NdotL > 0.0) { /* diffuse component */ color += diffuse * NdotL; /* specular component */ RdotEye = dot(normalize(eye_pos_i), normalize(reflect(-lightDir, n))); if (RdotEye > 0.0) { color += specular * pow(RdotEye, shininess); } } gl_FragColor = color; }