Opengl顶点颜色插值
opengl vertex color interpolations
我刚刚开始使用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
相关文章:
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 将使用太多的纹理插值器 - 带旋转的着色器
- 升压插值条件变量可以虚假唤醒吗?
- 如何获得插值极坐标?
- 如何线性插值到不恒定的目的地
- 向心Catmull-Rom样条曲线插值alpha参数
- 使用 OpenGL 插值数据缓冲区?
- 缩放和插值数组
- 骨骼动画:变换矩阵(collada)之间的插值
- 从一组点C++平面插值
- 从 C++14 到 C++98 的端口字符串插值
- 将矢量的数据扩展到指定大小(插值)
- 双线性插值实现的错误
- 如何避免线性插值"trap"?
- 使用 DirectX 11 插值背景颜色?
- 从一种颜色插值到另一种颜色
- Qt:如何制作一个2d插值颜色的字段
- 在图像上应用颜色插值
- Opengl顶点颜色插值
- 从一种颜色到另一种颜色的插值