OpenGL - 顶点法线在点光源计算中扮演什么角色?

OpenGL - What role does a vertex normal play in point light calculations?

在逐片段点光照中,顶点法线在点光照计算中起什么作用?

我的理解是片段的亮度完全取决于它与光源的距离,方向矢量是无关紧要的。

示例着色器

precision mediump float;
uniform vec3 u_LightPos;

varying vec3 v_Position;
varying vec4 v_Color; 
varying vec3 v_Normal; 

void main()
{
    float distance = length(u_LightPos - v_Position);
    vec3 lightVector = normalize(u_LightPos - v_Position); 
    float diffuse = max(dot(v_Normal, lightVector), 0.1);
    diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
    gl_FragColor = v_Color * diffuse;
}

您似乎在使用朗伯漫射照明。在这种情况下,表面亮度与入射光强度(等式中的平方反比项)以及表面法线与入射光方向之间夹角的余弦(等式中的点积)成正比).

经过深思熟虑,这很有意义。考虑两个极端:你会认为一张纸垂直于手电筒的光束比平行于光束的纸看起来更亮。

有关详细信息,请参阅相关维基百科页面的 this section