¿Cómo pasa vértice shader información de color a fragment shader?
En un sencillo programa OpenGL de hello-world, que simplemente dibuja un triángulo estático en la ventana, cuando configuro el vértice 3 del triángulo en rojo, verde y azul, el triángulo se llena con un degradado.
Pero cuando uso sombreadores como este:
Vertex Shader:
attribute vec4 aVertex;
attribute vec4 aColor;
varying vec4 vColor;
void main(void) {
gl_Position = gl_ModelViewMatrix * gl_ProjectionMatrix * aVertex;
vColor = aColor;
}
donde los atributosaVertex
yaColor
proviene de un búfer de vértice, pasado a través de una llamada deglVertexAttribPointer
.
Sombreador de fragmentos:
varying vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
El triángulo todavía está lleno de gradiente, y aquí viene la pregunta:
Si el vértice-sombreador se calcula por vértice, entonces cada instancia devColor
Debe asignarse con el color de un vértice. Y el color del vértice debe ser rojo, verde o azul, como se establece en el búfer del vértice.
Entonces, ¿de dónde viene el gradiente?
O, en otra palabra, ¿cuándo sucedió que en el frag-shader, elvColor
¿Resulta ser el color interpolado en lugar del vértice?