/* * CS5600 University of Utah * Charles McGarvey * mcgarvey@eng.utah.edu */ #define MAX_LIGHTS 2 uniform int numLights; uniform vec4 ambient; uniform vec4 mspecular; uniform float shininess; uniform vec4 diffuse[MAX_LIGHTS]; uniform vec4 specular[MAX_LIGHTS]; uniform sampler2D sampler; uniform bool isTexture; varying vec3 normal; varying vec2 textureCoord; varying vec4 color; varying vec3 lightDir[MAX_LIGHTS]; varying vec3 eyeVec; void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); vec4 c = color; if (isTexture) { c *= texture2D(sampler, vec2(textureCoord.x, 1.0 - textureCoord.y)); } vec3 N = normalize(normal); int i; for (i = 0; i < numLights; ++i) { vec3 L = normalize(lightDir[i]); float kd = dot(N, L); if (0.0 < kd) { gl_FragColor += diffuse[i] * c * kd; vec3 E = normalize(eyeVec); vec3 R = reflect(-L, N); float ks = pow(max(dot(R, E), 0.0), shininess); gl_FragColor += specular[i] * mspecular * ks; } } gl_FragColor += ambient * c; gl_FragColor.a = color.a; // preserve the model's alpha }