【问题标题】:OpenGL illuminating opposite faces with the same normalOpenGL用相同的法线照亮对面
【发布时间】:2015-12-02 23:13:06
【问题描述】:

使用 OpenGL 着色器,我想使用漫反射光照渲染一个实心立方体。为此,我计算每个顶点的法线,然后计算该法线与光的方向之间的点积。这样做的问题是立方体上的每一对平面具有相同的法线方向,因此具有相同的光照强度。但如果光源在立方体的正上方,那么顶面应该是亮的,底面应该是暗的——它们不应该是一样的。

解决办法是什么?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    立方体顶部的法线应该与底部的法线方向相反。因此,点积的结果将是上侧的 1 和底部平面的 -1。如果将点积限制在 [0, 1] 范围内,则底边会变暗。

    【讨论】:

    • 谢谢,这是有道理的。当我为每个顶点定义法线时,我取该顶点所属的三角形两侧的叉积。那么如何确保相反的最爱上的顶点具有相反的法线?我必须手动设置法线的方向吗?还是与取叉积的顺序有关?
    • 这是由叉积参数的顺序给出的。当你所有的三角形都有相同的缠绕顺序时,就不需要做任何特别的事情了。只需以相同的方式计算所有它们的法线即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多