橙皮书第 16.2 节列出了实现漫射照明:
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));
}
但是,当我运行它时,当我移动相机时,照明会发生变化。另一方面,当我改变
vec3 N = normalize(gl_NormalMatrix * gl_Normal);
到 vec3 N = normalize(gl_Normal);
我得到像固定管道一样工作的漫射照明。
这个 gl_NormalMatrix 是什么,删除它做了什么,......这是橙皮书中的一个错误......还是我不正确地设置了我的 OpenGl 代码?
[为完整起见,片段着色器仅复制颜色]