Der Vertex Shader ist Teil der OpenGL Draw-Pipeline und wird für jeden Vertex aufgerufen. Üblicherweise wird hier berechnet:
- Transformationen der Model-Verticies durch die verschiedenen Spaces
Ein Vertex Shader muss mindestens die Clip Space-Position des aktuellen Vertex in gl_Position zurück geben.
Siehe auch
Arbeitsweise
- Vom Input
gl_VertexIDkommt der Index des aktuellen Vertex - In den Output
gl_Positionkommt die Clip-Space Position des aktuellen Vertex - Andere Inputs mit können mit Input-Streams verbunden werden mit glBindAttribLocation
Interpolationsart einstellen
Alle Outputs werden an den Rasterisierer gegeben, der diese dann Interpoliert und an den Fragment Shader weitergibt.
Man kann die Art und Weise, wie interpoliert wird steuern, indem man vor out ein Keyword schreibt:
<Kein Keyword>- Interpoliert durch Baryzentrische Interpolationflat- Kein Interpolieren, Wert kommt vom “provoking vertex” (meist erster Vertex des Dreiecks)noperspectiveInterpolation durch Lineare Interpolation, ohne Perspektivkorrektur
Beispiel:
flat out vec3 frag_col; Beispiel
Dieser Vertex Shader transformiert einen Vertex vom Eyespace in den Clip Space und gibt die Farbe weiter an den Fragment Shader:
in vec3 local_vertex;
in vec3 color;
out vec3 frag_col;
uniform mat4 view;
uniform mat4 proj;
void main() {
gl_Position = proj * view * vec4(local_vertex, 1.0);
frag_col = color;
}