从着色器未处理的位置照明基元

时间:2013-12-30 03:07:06

标签: c++ opengl primitive lighting

我有一个着色器,用于计算漫反射光照值。它由顶点和片段着色器组成,可以在每个顶点的基础上计算光照强度。然而,正如预期的那样,如果我有一个较大的GL_TRIANGLE具有光线位置,比如说,正好在三角形的中心上方,那么应该照亮它的光线不会出现,因为光线的值是在整个表面上平滑插值的。基于顶点计算的三角形。

所以我的问题是 - 如何通过光源在其顶点之外的位置点亮原始图像?

1 个答案:

答案 0 :(得分:1)

当您在顶点进行照明时,您正在执行 Phong lighting ,它正在计算顶点处的颜色,然后仅插入在顶点处计算的颜色(即Gouraud着色)基元中的所有像素。如果你要计算每个像素的光照颜色,你会得到 Phong着色。根据您的场景,如果您将光照计算从顶点着色器移动到片段着色器,并在原始图形上插入法线,您应该会得到更好的结果。

如果使顶点法线为变量变量并在片段着色器中对其进行标准化,然后进行光照计算,则应该会得到更好的结果。