Computergrafik

Modellierung Standard-Codesequenz

GLSL Anwendungsbeispiel | | GLSL Syntax

Wie benutzt man das Framework inklusive Editor für Shader?

Achtung: Das ganze sind nur Code-Vorschläge, diese müssen für eigene Funktionalität verändert werden, und die Variablennamen den eigenen Konventionen angepasst werden.

Transformation eines Vertex

Erinnerung: Die entgültige Transformation eines Vektors geschieht über die Multiplikation an eine Model-View-Projektion-Matrix: $ v' = M_{MVP} \cdot v $

In OpenGL erledigt man das im Vertex-Shader; zusätzlich benötigt man einen Fragment-Shader, der hier alle Pixel rot macht (Beleuchtungsberechnung etc. später):

Global

Includes und Shader am Anfang des Hauptprogramms definieren (genaus so, wörtlich!):

#include <glvertex_qt_glui.h>
#include <glvertex_qt_shadereditor.h>

const char shader[] =
    "#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"
    "void main()\n"
    "{\n"
    " gl_FragColor = vec4 (1, 0, 0, 1);\n"
    "}\n";

(Protected) Feld anlegen für:

  • Shader-Programm ( GLuint program; )

Init-Funktion

Erzeugen der Shader
Aus dem Quelltext selber (wie oben definiert)
program = lglCompileGLSLProgram (shader);
Ggf. erstellen eines Shader-Editor-Fensters
create_lgl_Qt_ShaderEditor ("shader", &program);

Display-Funktion

Aktivieren des Shaders für alle Objekte
// (re)enable shader w/o clearing uniforms
lglUseProgram (program, false);
Setzen der Projektions- und der ModellView-Matrix
(und implizit der ModelViewProjection):
mat4 proj, mv;
//[...] werden berechnet
// load matrices
lglProjection (proj);
lglModelView (mv);
Zeichnen
lglRender(cube);


GLSL Anwendungsbeispiel | | GLSL Syntax

Options: