Фон
Я смотрю на этот пример кода из библиотеки 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 для пикселей между вершинами?Если да, то как выполняется интерполяция?