I have made a Shader that has both specular lightning and multiple lights. But, I can’t get it to work properly.
gl_FrontLightProduct[i].diffuse and gl_FrontLightProduct[i].ambient work just great. But whenever I put in gl_FrontLightProduct[i].specular, my specular lighting quits working.
Any ideas on what is going on?
Frag shader:
#define MAX_LIGHTS 8
#define NUM_LIGHTS 1
varying vec3 lightVec[NUM_LIGHTS];
varying vec3 halfVec[NUM_LIGHTS];
uniform sampler2D colorMap;
uniform sampler2D normalMap;
uniform sampler2D specularMap;
uniform float shininess;
void main(void)
{
vec2 uv = gl_TexCoord[0].st;
vec4 base = texture2D(colorMap, gl_TexCoord[0].st);
vec4 final_color = vec4(0.0, 0.0, 0.0, 0.0);
vec3 bump =normalize(texture2D(normalMap, gl_TexCoord[1].st).xyz * 2.0 - 1.0);
vec4 specularColor=texture2D(specularMap, gl_TexCoord[2].st);
int i;
for (i=0; i<NUM_LIGHTS; ++i)
{
//ambient
vec4 vAmbient=gl_FrontLightProduct[i].ambient*base;
final_color += vAmbient;
//diffuse
vec3 lVec = normalize(lightVec[i]);
float diffuse = max(dot(lVec, bump), 0.0);
vec4 vDiffuse =gl_FrontLightProduct[i].diffuse *diffuse * base;
final_color += vDiffuse;
//specular
float specularModifier=max(dot(bump, normalize(halfVec[i])), 0.0);
vec4 vSpecular= (specularColor *pow(specularModifier, shininess));
//previous line SHOULD BE: vec4 vSpecular= gl_FrontLightProduct[i].specular *specularColor *pow(specularModifier, shininess);
final_color += vSpecular;
}
gl_FragColor = clamp(final_color, 0.0, 1.0);
gl_FragColor.a=base.a;
}