views:

55

answers:

0

The Orange book, section 16.2, lists implementing diffuse lighting as:

void main()
{
  vec3 N = normalize(gl_NormalMatrix * gl_Normal);
  vec4 V = gl_ModelViewMatrix * gl_vertex;
  vec3 L = normalize(lightPos - V.xyz);
  gl_FrontColor = gl_Color * vec4(max(0.0, dot(N, L));
}

However, when I run this, the lighting changes when I move my camera. On the other hand, when I change

  vec3 N = normalize(gl_NormalMatrix * gl_Normal);

to vec3 N = normalize(gl_Normal);

I get diffuse lighting that works like the fixed pipeline.

What is this gl_NormalMatrix, what did removing it do, ... and is this a bug in the orange book ... or am I setting up my OpenGl code improperly?

[For completeness, the fragment shader just copies the color]