blob: 61b1d4fb57eb0bf8c2cfdce2350c03a7c76bbfce [file] [log] [blame]
uniform vec4 light0Position;
varying vec3 vertex_normal;
varying vec4 vertex_position;
varying vec3 eye_direction;
vec3 unitvec(vec4 v1, vec4 v2)
{
if (v1.w == 0.0 && v2.w == 0.0)
return vec3(v2 - v1);
if (v1.w == 0.0)
return vec3(-v1);
if (v2.w == 0.0)
return vec3(v2);
return v2.xyz/v2.w - v1.xyz/v1.w;
}
void main()
{
vec4 lightAmbient = vec4(0.0, 0.0, 0.0, 1.0);
vec4 lightDiffuse = vec4(1.0, 1.0, 1.0, 1.0);
vec4 lightSpecular = vec4(1.0, 1.0, 1.0, 1.0);
vec4 matAmbient = vec4(0.1, 0.1, 0.1, 1.0);
vec4 matDiffuse = vec4(0.5, 0.4, 0.7, 1.0);
vec4 matSpecular = vec4(1.0, 1.0, 1.0, 1.0);
float matShininess = 30.0;
vec3 light_direction = normalize(unitvec(vertex_position, light0Position));
vec3 normalized_normal = normalize(vertex_normal);
vec3 reflection = reflect(-light_direction, normalized_normal);
float specularTerm = pow(max(0.0, dot(reflection, eye_direction)), matShininess);
float diffuseTerm = max(0.0, dot(normalized_normal, light_direction));
vec4 specular = (lightSpecular * matSpecular);
vec4 ambient = (lightAmbient * matAmbient);
vec4 diffuse = (lightDiffuse * matDiffuse);
gl_FragColor = (specular * specularTerm) + ambient + (diffuse * diffuseTerm);
}