【发布时间】:2020-01-21 13:44:36
【问题描述】:
背景
我正在查看来自 WebGL2 库 PicoGL.js 的 this example code。
它描述了一个三角形(三个顶点:(-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 的值?如果有,插值是怎么做的?
【问题讨论】:
标签: opengl-es glsl webgl shader webgl2