Grundlagen OpenGL Shading Language
Einführung: Wie läuft ein GPU Programm ab ?

- Texturen werden an die Grafikkarte gesendet.
- Vertex Daten (Position, Normalen, Farbe etc.) werden übermittelt.
- Der Vertex Shader, den wir programmieren können, erhält diese Daten. Dort können wir z.B. Vertices von Objektkoordinaten in Welt-Koordinaten transformieren.
- Der Fragment Shader, den wir auch programmieren können, berechnet Farbwerte jedes Pixels der Dreiecke. Wie die Farbwerte berechnet werden, ist uns überlassen!
Zu jedem Vertex Shader (Geometrie der Ecken) gehört ein entsprechender Fragment Shader (Farbe pro Pixel).
Aufgaben Vertex Shader
Kontrolle über die Position von Vertices Benutzerdefiniertes Lighting (per Vertex) Benutzerdefiniertes Skinning/Blending Beliebige Vertexberechnung (z.B. Fischauge) Beschleuningung komplexer Vertex Operationen, Partikelsysteme.
Aufgaben Fragment Shader
Farbe pro Pixel berechnen Texturierung Benutzerdefiniertes Lighting (per Fragment) Nebel u.v.m.
Minimales Vertex Programm
Eingabe: Beliebige Vertex Attribute, ev. «globale» Variablen
Ausgabe: Transformierte Vertex Attribute:
- erforderlich: Position in Clip Koordinaten (homogen)
- Farbe (front/back, primary/secondary)
- Fog Koordinaten
- Textur Koordinaten
- Point Size
Ein Vertex Programm kann keine Vertices generieren oder zerstören!
Standardmässig sind keine topologischen Informationen vorhanden! (Kanten, Nachbar…)
Beispiel: Minimales Vertex Programm GLSL
Ein Vertex wird von Objekt Koordinaten in Clip Koordinaten transformiert.
| void main(void) { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; } |
Minimales Fragment Programm
Eingabe: Interpolierte Daten vom Vertex Shader, ev. «globale» Variablen
Ausgabe: Farbwert Pixel
Beispiel: Minimales Fragment Programm GLSL
Jeder Pixel wird rot.
| void main(void) { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); } |