背景
我正在查看 WebGL2 库 PicoGL.js 中的 此示例代码。
它描述了一个单独的三角形(三个顶点:(-0.5, -0.5), (0.5, -0.5), (0.0, 0.5)
),每个顶点都由顶点着色器分配一个颜色(红色、绿色、蓝色):
#version 300 es
layout(location=0) in vec4 position;
layout(location=1) in vec3 color;
out vec3 vColor;
void main() {
vColor = color;
gl_Position = position;
}
vColor
输出被传递到片段着色器:
#version 300 es
precision highp float;
in vec3 vColor;
out vec4 fragColor;
void main() {
fragColor = vec4(vColor, 1.0);
}
它们一起呈现以下图像:
问题
我理解顶点着色器每个顶点只调用一次,而片元着色器每个像素只调用一次。
然而,片元着色器引用了vColor
变量,该变量仅在每个顶点调用时分配一次,但是像素比顶点多得多!
生成的图像清楚地显示出颜色渐变-为什么?
WebGL自动插值vColor
的值以填充顶点之间的像素吗?如果是这样,插值是如何完成的?