用于均匀照明的 OpenGL 照明

OpenGL Lighting for uniform illumination

看看下面两张图 -

2张图片是同一型号不同角度。它由多个圆柱体堆叠而成。如您所见,灯光有些有趣。在第一张图片中,所有圆柱体的一侧都是黑色的。当旋转同一模型时,所有圆柱体的另一端都会变暗。解释很清楚。法线与光的方向对齐以照亮一侧。我希望两侧的光线同样充足,并且不影响圆柱体的 3d 外观和感觉。我应该如何设置灯光?

我正在使用平滑着色。

如果没有更多信息,很难说出问题所在。

我认为正在发生的事情是圆柱体是用平滑的着色法线创建的。这在视觉上令人愉悦,但当多边形数量较少时,它可能会产生类似这样的问题。


(来源:k-3D.org

在此图像中,左起第一个圆柱体具有平坦的阴影,中间的圆柱体具有平滑的阴影。正如您在此示例中所见,平滑阴影的一侧也存在光线太少的问题。原因是,在平滑着色的情况下,圆柱体边缘的法线是侧面法线和顶部法线的平均值,这会导致照明问题。看这张图:

黄色箭头是光线方向,红色是平滑法线,绿色是平面法线。看看光滑的法线和光线之间的角度大约是 90º,所以它不会得到光线。

解决方法是将法线设置为平滑,但从侧面分离顶面和底面。这样,圆形边缘不会变得平滑,但侧面会。结果是第一张图片上的第三个圆柱体。

如果您无法使用您的软件实现这一点,一个简单的解决方案是在边缘周围添加一个斜角,如下所示:

斜角可以小到小,达到你想要的效果。

希望对您有所帮助。