В простой приветственной программе OpenGL, которая просто рисует статический треугольник в окне, когда я устанавливаю 3 вершины треугольника на красный, зеленый и синий цвета, треугольник заполняется градиентом.
Но когда я использую шейдеры следующим образом:
Vertex Shader:
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
следует назначить цвет вершины. Цвет вершин должен быть красным, зеленым или синим, как установлено в буфере вершин.
Итак, откуда появился градиент?
Или, другими словами, когда это случилось, что в frag-shader, vColor
оказывается интерполированным цветом вместо вершин?