OpenGL - 顶点法线在点光计算中起什么作用?

时间:2016-04-12 05:21:08

标签: opengl glsl shader

在每个片段点光源中,顶点法线在点光计算中起什么作用?

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

示例着色器

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;
}

1 个答案:

答案 0 :(得分:1)

您似乎正在使用Lambertian漫反射照明。在这种情况下,表面亮度与入射光强度(等式中的平方反比)成正比,另外还有表面法线与入射光方向之间角度的余弦(等式中的点积) )。

经过一番思考后,这很有意义。考虑两个极端:你会发现一张垂直于手电筒光束的纸张看起来比平行于光束的纸张要亮得多。

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