Computergrafik

Qt GLUI

GL Attribute | | LGL API

Houston, we have a Problem!

Q Woher wissen wir welche OpenGL Version installiert ist, und ob wir überhaupt die vorherigen Legacy-Methoden noch benützen können?

Wissen wir nicht! Wir können uns nicht darauf verlassen!

Wir verwenden daher das glVertex-Framework, welche die Legacy-Methoden reimplementiert! Diese werden vom Framework über entsprechende lgl-Varianten anstelle des gl-Prefixes emuliert.

Also ab sofort:

  • lglVertex(x,y,z) statt glVertex3f(x,y,z)
  • lglColor(r,g,b,a) statt glColor4f(r,g,b,a)
  • entsprechend lglBegin(LGL_TRIANGLES) und lglEnd()

Qt

Das glVertex-Framework setzt auf Qt auf. Qt ist eine GUI-Bibliothek, die Betriebssystem, Grafiksystem, Eingabe, etc. abstrahiert. Sie enthält viele Funktionen, die plattformunabhängiges Programmieren einfacher machen.

Im Framework-Kontext wird das OpenGL-Fenster von der Klasse Qt_GLWindow realisiert. Diese ist von der Basisklasse lgl_Qt_GLUI abgeleitet, welche wiederum von QOpenGLWindow abgeleitet ist.

Diese Klasse kümmert sich um fast alles, was das Programmiererleben mit OpenGL einfacher macht, wie z.B das Erzeugen eines passenden OpenGL Cor Kontextes und Profils. Double Buffering (via glXSwapBuffers) übernimmt ebenfalls das Framework.

Man selber erstellt nur Konstruktor, [Destruktor] und überlädt initializeOpenGL() und renderOpenGL(double dt), d.h. man programmiert an den mit … kenntlich gemachten Stellen:

#include <glvertex_qt_glui.h>

class Qt_GLWindow: public lgl_Qt_GLUI
{
public:

    Qt_GLWindow() : lgl_Qt_GLUI()
    {
       // initialize variables
       ...
    }

protected:

    void initializeOpenGL()
    {
       // initialize something once
       ...
    }

    void renderOpenGL(double dt)
    {
       // render something each an every frame
       ...
    }
};

Eine Qt-Applikation enthält in der main() Routine immer ein QApplication Objekt, und ein oder mehrere UI-Objekte wie z.B. von der Klasse Qt-GLWindow:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Qt_GLWindow main;
    main.show();

    return(app.exec());
}

Das Framework erleichtert den Einstieg in die Computergrafik-Programmierung sehr, indem es für gängige Aufgaben wie OpenGL-Kontext anlegen, Matrizen definieren, Texturen-Laden, VBOs erzeugen usw. einfachere OpenGL-Ersatzbefehle anbietet. Eine Textur laden oder kreieren geht z.B. in wenigen Zeilen. Mit Plain-OpenGL wären das Dutzende Zeilen Code.

Einen ähnlichen Ansatz verfolgen Game-Engines wie Unreal und Godot. In den wenigsten Fällen wird man daher direkt mit OpenGL arbeiten, sondern immer mit einer abstrahierten Zwischenschicht.

GL Attribute | | LGL API

Options: