OpenGL Lighting用于均匀照明

时间:2015-04-16 10:24:03

标签: opengl 3d

查看以下2张图片 -

enter image description here

enter image description here

2幅图像在不同角度具有相同的型号。它由多个圆柱体堆叠在一起而成。正如你所看到的,照明有一些有趣的东西。所有圆柱体的一侧在第一张图像中是暗的。旋转相同型号时,所有气缸的另一端变暗。解释非常清楚。法线在光的方向上对齐以点亮一侧。我希望双方同样光线充足,并且不要在圆柱体的3D外观和感觉上妥协。我应该如何设置照明?

我正在使用Smooth Shading。

1 个答案:

答案 0 :(得分:1)

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

我认为发生的是圆柱体是用平滑的阴影法线创建的。这在视觉上是令人愉悦的,但是当多边形数量很少时,它会产生像这样的问题。

types of shading http://www.k-3D.org/k3d_wiki/images/c/ce/Normals.png

在此图像中,左侧的第一个圆柱体具有平面阴影,中间的圆柱体具有平滑的阴影。正如您在此示例中所看到的那样,光滑的阴影也存在一侧光线太少的问题。原因在于,通过平滑的阴影,圆柱体边缘的法线是侧面法线的平均值和顶部法线的平均值,这可能导致照明问题。见下图:

diagram

黄色箭头是光线方向,红色是平滑法线,绿色是平坦法线。看看光滑法线和光线之间的角度是如何在90º左右,这样它就不会发光。

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

如果您无法通过软件实现这一目标,那么一个简单的解决方案就是在边缘附近添加斜角:

bevel

斜角可以随意变小,它可以达到您想要的效果。

希望它有所帮助。