Computergrafik

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:

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"
    "uniform vec4 color;\n"
    "void main()\n"
    "{\n"
    " gl_FragColor = color;\n"
    "}\n";

Variable (i.d.R. protected) anlegen für:

  • Shader-Programm
GLuint program;

Init-Funktion

Erzeugen der GLSL Shader

  • Aus dem Quelltext wie oben definiert
program = lglCompileGLSLProgram(shader);

Render-Funktion

Aktivieren des Shaders für alle Objekte

lglUseProgram (program);

Setzen der Projektions- und der ModelView-Matrix (implizit MVP)

lglProjection(P);
lglModelView(MV);

Zeichnen eines VBO, Cube etc.

lglRender(vbo);

Live Demo: GLSL Shader Editor (T#10)

GLSL Anwendungsbeispiel | | GLSL Syntax

Options: