Modellierung Standard-Codesequenz
← GLSL Anwendungsbeispiel | ● | GLSL Syntax →
Wie benutzt man GLSL Shader im LGL Framework anhand eines denkbar einfachen Beispiels?
Transformation eines Vertex
Erinnerung: Die Transformation eines Vektors geschieht über die rechtsseitige Multiplikation an eine Model-View-Projektion-Matrix: $ v' = M_{MVP} \cdot v $
In OpenGL erledigt das der Vertex-Shader; zusätzlich benötigt man einen Fragment-Shader, der der finale Fragment-Farbe berechnet.
Die aktuelle MVP wird automatisch als “mvp” und die aktuelle Default-Farbe als “color” bereitgestellt. Die vertices eines VBO werden als “vertex_position” bereitsgestellte (analog für “vertex_color”, “vertex_normal”, “vertex_texcoord”).
Global
Am Anfang des Programms den denkbar einfachsten Shader definieren:
"#version 120\n"
"uniform mat4 mvp;\n"
"attribute vec4 vertex_position;\n"
"void main()\n"
"{\n"
" gl_Position = mvp * vertex_position;\n"
"}\n"
"---\n"
"#version 120\n"
"uniform vec4 color;\n"
"void main()\n"
"{\n"
" gl_FragColor = color;\n"
"}\n";
Variable (i.d.R. protected) anlegen für:
- Shader-Programm
Init-Funktion
Erzeugen der GLSL Shader
- Aus dem Quelltext wie oben definiert
Render-Funktion
Aktivieren des Shaders für alle Objekte
Setzen der Projektions- und der ModelView-Matrix (implizit MVP)
lglModelView(MV);
Zeichnen eines VBO, Cube etc.
Live Demo: GLSL Shader Editor (T#10)
← GLSL Anwendungsbeispiel | ● | GLSL Syntax →