Computergrafik

Qt / LGL Programming Template

LGL API | | Matrix Transformationen

Das Programmier-Template auf Basis der LGL API:

#include <glvertex_qt_glui.h>

class Qt_GLWindow: public lgl_Qt_GLUI
{
public:

   Qt_GLWindow() : lgl_Qt_GLUI()
   {
      // put initializations here (no OpenGL context available yet):
      // ...
   }

protected:

   void initializeOpenGL()
   {
      // put OpenGL initializations here (OpenGL context hase been created):
      // ...
      //
      // for example:
      //
      // lglClearColor(1,1,1);
   }

   void renderOpenGL(double dt)
   {
      // clear frame buffer
      lglClear();

      // just show a greeting in the beginning
      lglDrawString(1, "Hello, OpenGL!");

      // put OpenGL rendering commands here:
      // ...
      //
      // for example:
      //
      // lglBegin(LGL_LINES);
      //    lglVertex(-1,-1,0);
      //    lglVertex(1,1,0);
      // lglEnd();
   }

   void keyPressed(char key)
   {
      // put key checks here:
      // ...
      //
      // for example:
      //
      // if (key == 'q')
      //    exit(0);
   }

};

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

   Qt_GLWindow main;
   main.show();

   return(app.exec());
}

Dieses Programmier-Template wird in den Übungen als Grundlage für das Programmieren mit OpenGL verwendet.

Es stellt mit Hilfe der Klasse lgl_Qt_GLUI welche von lgl_Qt_GLWidget ableitet ein Programmier-Interface mit den folgenden zwei wesentlichen Methoden bereit:

  1. void lgl_Qt_GLUI::initializeOpenGL()
  2. void lgl_Qt_GLUI::renderOpenGL(double dt)

Diese Methoden sind virtuell und müssen implementiert werden, um ein lauffähiges 3D Programm zu erzeugen.

Dazu leitet man die Interface-Klasse ab und implementiert die obigen Methoden, so dass in

  1. alles hineinkommt, was einmal zum Programmstart ausgeführt werden soll
  2. alles hineinkommt, was wiederholt in jedem Frame gezeichnet werden soll

Unter der Haube implementiert dieses Interface wiederum die folgenden Methoden der Qt Interface-Klasse QOpenGLWidget, welche auf der untersten Ebene einen OpenGL Rendering Kontext bereitstellt:

  1. QOpenGLWidget::initializeGL()
  2. QOpenGLWidget::resizeGL()
  3. QOpenGLWidget::paintGL()

Zum Verständnis der Interna dieses internen Qt-Interfaces wären vertiefte Kenntnisse von Qt und GLX notwendig, so dass diese Interna für die Programierübungen im darüber gestülpten Interface lgl_Qt_GLUI wegversteckt wurden.

Mehr Hintergrundwissen und die Details zur Benutzung des Templates finden Sie in diesem YouTube-Video.

Das Video ist während Corona in 2021 entstanden und erklärt die Benutzung anhand von Linux. Das Vorgehen ist aber für Windows und Mac analog, d.h. es kann genau wie unter Linux der QtCreator verwendet werden, nur die Installation desselben ist ein bisschen anders (siehe dazu die entsprechenden Installationshinweise).

LGL API | | Matrix Transformationen

Options: