如何在 Gouraud 着色器脚本中插入颜色值?

How are colour-values interpolated in a Gouraud-shaderscript?

gouraud 着色器计算每个三角形角处的光照,并为三角形覆盖的每个像素线性插值结果颜色。

你如何编写这个特定的插值(在 GLSL 代码中)?

您甚至需要自己编写代码还是 OpenGL 插值 (内部) 单枪匹马?

来自 https://www.opengl.org/wiki/Type_Qualifier_(GLSL) :

插值限定符

某些输入和输出可以使用插值限定符。这些适用于可以作为光栅化结果进行插值的任何值。其中包括:

  • 顶点着色器输出
  • 曲面细分控制着色器输入(以匹配来自 VS)
  • 曲面细分评估着色器输出
  • 几何着色器输入(与 TES/VS 的输出相匹配)和 输出
  • 片段着色器输入

插值限定符控制如何在三角形或其他基元上进行值插值。共有三个基本插值限定符。

平坦

不会对值进行插值。赋予片段着色器的值是来自该图元的 Provoking Vertex 的值。

无视

该值将在 window-space 中进行线性插值。这通常不是你想要的,但它可以有它的用处。

流畅

该值将以透视正确的方式进行插值。如果没有限定符,这是默认设置。


由于平滑是默认平滑,因此 OpenGL 会为您进行插值。如果您不想要插值,您可以在着色器中使用关键字 flat 定义颜色,如下所示:

flat vec3 color;