Here are a couple frames that show the problem:
[attachment=9979:phong01.jpg]
[attachment=9980:phong02.jpg]
As you can see, diffuse light is not visible on the back of the model, but specular is! What could be causing this?
Here are my shaders:
/* vertex shader */
attribute vec3 v_position;
attribute vec3 v_normal;
uniform mat4 mat_p; //projection
uniform mat4 mat_mv; //modelview
uniform mat4 mat_n; //normal matrix
uniform vec3 light_pos[2]; //lights
varying vec3 normal; //normal
varying vec3 light_dir[2];
varying vec3 eye_vec;
void main(){
normal = (mat_n * vec4(v_normal,0.0)).xyz;
vec4 newVertex = mat_mv * vec4(v_position,1.0);
eye_vec = -newVertex.xyz;
//send lights to fragment shader
light_dir[0] = light_pos[0] - newVertex.xyz;
light_dir[1] = light_pos[1] - newVertex.xyz;
gl_Position = mat_p * newVertex;
}
/* fragment shader */
uniform vec3 c; //color
varying vec3 normal;
varying vec3 eye_vec;
varying vec3 light_dir[2];
void main(){
vec3 N = normalize(normal);
vec3 E = normalize(eye_vec);
//specify material
vec4 m_amb = vec4(0.07,0.02,0.07,1.0);
vec4 m_diff = vec4(c.r,c.g,c.b,1.0);
vec4 m_spec = vec4(c.r,c.g,c.b,1.0);
clamp(m_spec, 0.0, 1.0);
float m_shine = 20.0;
vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0);
vec3 L = normalize(light_dir[0]); //light position
//ambient
vec4 Iamb = (m_amb*0.8);
//diffuse
vec4 Idiff = m_diff * max(dot(N,L), 0.0);
Idiff = clamp(Idiff, 0.0, 1.0);
//specular
vec3 R = normalize(reflect(-L,N));
vec4 Ispec = m_spec * pow(max(dot(R,E),0.0), m_shine);
Ispec = clamp(Ispec, 0.0, 1.0);
finalColor += Iamb + Idiff + Ispec;
gl_FragColor = finalColor;
}