Comment vertex shader transmettre les informations de couleur de fragment shader?

Dans un simple hello world programme OpenGL, qui dessine simplement statique triangle sur la fenêtre,
lorsque j'ai mis les 3 sommets du triangle pour le rouge, le vert et le bleu, le triangle est rempli avec un dégradé.

Mais quand j'utilise les shaders comme ceci:

Vertex Shader:

attribute vec4 aVertex;
attribute vec4 aColor;

varying vec4 vColor;

void main(void) {
    gl_Position = gl_ModelViewMatrix * gl_ProjectionMatrix * aVertex;
    vColor = aColor;
}

où les attributs aVertex et aColor vient d'un vertex buffer, transmis par le biais d'un appel de glVertexAttribPointer.

Fragment Shader:

varying vec4 vColor;
void main(void) {
    gl_FragColor = vColor;
}

Le triangle est toujours rempli avec un dégradé, et voici la question:

Si vertex shader est calculé par vertex, puis chaque instance de vColor doit être attribué à la couleur d'un sommet. Et le sommet de la couleur doit être de couleur rouge, de vert ou de bleu, comme défini dans le vertex buffer.

Alors d'où vient le gradient de venir?

Ou, dans un autre mot, quand il est arrivé que dans la frag-shader, le vColor s'avère être la couleur interpolée au lieu de le vertex?

InformationsquelleAutor RnMss | 2013-08-15