如何在 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;
gouraud 着色器计算每个三角形角处的光照,并为三角形覆盖的每个像素线性插值结果颜色。
你如何编写这个特定的插值(在 GLSL 代码中)?
您甚至需要自己编写代码还是 OpenGL 插值 (内部) 单枪匹马?
来自 https://www.opengl.org/wiki/Type_Qualifier_(GLSL) :
插值限定符
某些输入和输出可以使用插值限定符。这些适用于可以作为光栅化结果进行插值的任何值。其中包括:
- 顶点着色器输出
- 曲面细分控制着色器输入(以匹配来自 VS)
- 曲面细分评估着色器输出
- 几何着色器输入(与 TES/VS 的输出相匹配)和 输出
- 片段着色器输入
插值限定符控制如何在三角形或其他基元上进行值插值。共有三个基本插值限定符。
平坦
不会对值进行插值。赋予片段着色器的值是来自该图元的 Provoking Vertex 的值。
无视
该值将在 window-space 中进行线性插值。这通常不是你想要的,但它可以有它的用处。
流畅
该值将以透视正确的方式进行插值。如果没有限定符,这是默认设置。
由于平滑是默认平滑,因此 OpenGL 会为您进行插值。如果您不想要插值,您可以在着色器中使用关键字 flat 定义颜色,如下所示:
flat vec3 color;