W jaki sposób moduł cieniujący wierzchołków przekazuje informacje o kolorze w celu fragmentacji modułu cieniującego?

W prostym hello-świecie OpenGL, który po prostu rysuje statyczny trójkąt na oknie, kiedy ustawiam 3 wierzchołki trójkąta na czerwony, zielony i niebieski kolor, trójkąt jest wypełniony gradientem.

Ale kiedy używam takich shaderów:

Vertex Shader:

attribute vec4 aVertex;
attribute vec4 aColor;

varying vec4 vColor;

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

gdzie atrybutyaVertex iaColor pochodzi z bufora wierzchołków, przechodzącego przez wezwanieglVertexAttribPointer.

Fragment Shader:

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

Trójkąt jest nadal wypełniony gradientem i tutaj pojawia się pytanie:

Jeśli vertex-shader jest obliczany na wierzchołek, to każde wystąpienievColor powinien mieć przypisany kolor wierzchołka. A kolor wierzchołka powinien być czerwony, zielony lub niebieski, zgodnie z ustawieniem w buforze wierzchołków.

Skąd więc pochodzi gradient?

Innymi słowy, kiedy to się stało, że w fragmencie shaderavColor okazuje się być interpolowanym kolorem zamiast wierzchołka?

questionAnswers(2)

yourAnswerToTheQuestion