【发布时间】:2026-01-10 04:40:01
【问题描述】:
在一个简单的 hello-world OpenGL 程序中,它只是在窗口上绘制一个静态三角形, 当我将三角形的 3 个顶点设置为红色、绿色和蓝色时,三角形被渐变填充。
但是当我使用这样的着色器时:
顶点着色器:
attribute vec4 aVertex;
attribute vec4 aColor;
varying vec4 vColor;
void main(void) {
gl_Position = gl_ModelViewMatrix * gl_ProjectionMatrix * aVertex;
vColor = aColor;
}
其中aVertex 和aColor 属性来自顶点缓冲区,通过glVertexAttribPointer 调用传递。
片段着色器:
varying vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
三角形还是用渐变填充的,问题来了:
如果顶点着色器是按顶点计算的,那么vColor 的每个实例都应该分配一个顶点的颜色。并且顶点颜色应该是红色、绿色或蓝色,如顶点缓冲区中设置的那样。
那么渐变是从哪里来的呢?
或者,换句话说,什么时候在片段着色器中,vColor 变成了插值颜色而不是顶点的颜色?
【问题讨论】:
-
这里有更多关于 vec 或 mat 值变化情况的信息:gamedev.stackexchange.com/questions/139720/…