在一个简单的 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
结果是插值颜色而不是顶点颜色?