Opengl顶点颜色插值

opengl vertex color interpolations

本文关键字:插值 颜色 顶点 Opengl      更新时间:2023-10-16

我刚刚开始使用opengl学习图形,几乎没有掌握着色器等的想法。按照一组教程,我在屏幕上画了一个三角形,并为每个顶点分配了一个颜色属性。

使用顶点着色器,我将颜色值转发给片段着色器,然后简单地将顶点颜色分配给片段。

顶点着色器:

[.....]
layout(location = 1) in vec3 vertexColor;
out vec3 fragmentColor;
void main(){
    [.....]
    fragmentColor = vertexColor;
}

片段着色器:

[.....]
out vec3 color;
in vec3 fragmentColor;
void main()
{
color = fragmentColor;
}

所以我给三角形的每个顶点分配了不同的颜色。结果是一个平滑插值的彩色三角形。

我的问题是:因为我发送一个特定的颜色片段着色器,平滑插值发生在哪里?它是opengl中默认启用的状态吗?这个状态还可以有哪些值,我如何在它们之间切换?我希望使用片段着色器完全控制像素颜色,但似乎有改变结果的幕后计算。显然有些事情我不明白,有谁能帮我解决这个问题吗?

在OpenGL管道中,在顶点着色阶段(顶点,细分和几何着色)和片段着色之间,是光栅化器。它的工作是确定哪些屏幕位置被特定的几何图形(点、线或三角形)所覆盖。知道了这些位置,加上输入顶点数据,栅格化器线性插值片段着色器中每个变量的数据值,并将这些值作为输入发送到你的片段着色器中。当应用于颜色值时,这被称为Gouraud明暗。

来源:OpenGL编程指南,第八版。

如果你想看看没有插值会发生什么,在绘制之前调用glShadeModel(GL_FLAT)。默认值为GL_SMOOTH