【问题标题】:OpenGL - What role does a vertex normal play in point light calculations?OpenGL - 顶点法线在点光计算中起什么作用?
【发布时间】:2016-04-12 05:21:08
【问题描述】:

在逐片段点光源中,顶点法线在点光源计算中扮演什么角色?

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

示例着色器

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

【问题讨论】:

    标签: opengl glsl shader


    【解决方案1】:

    看起来您正在使用朗伯漫反射照明。在这种情况下,表面亮度与入射光的强度(方程中的平方反比项)成正比,另外还与表面法线和入射光方向之间的夹角余弦(方程中的点积)成正比)。

    经过一番思考,这很有意义。考虑两个极端:您会认为与手电筒光束垂直的纸看起来比与光束平行的纸要亮得多。

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

    【讨论】:

    • 谢谢,我会继续阅读的。是否有独立于方向的替代点照明算法?
    • 我从来没有用过。这会有点奇怪,因为调整物体的视角不会影响表面光强度。您总是可以删除点积术语,看看没有它的样子。
    • 嗯,好的。所以使用 Lambertian 是非常标准的,谢谢。
    • 等一下,但这是一次预通行以计算光照贴图。我首先在着色器中实现它以获得我想要的效果,然后在 c# 中模仿它以转储到纹理。所以,方向实际上是无关紧要的。
    • 实际上..从头开始,我对相机方向和顶点方向感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2013-02-15
    • 2010-11-12
    • 2011-08-04
    • 2015-05-25
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多