CGExercises

Exercise #05

Computergraphik Übungsblatt #05


OpenGL Tutorial: Modeling & Viewing



OpenGL MVP



glVertex Cheat Sheet

Aufgabe 5.1: GLM

Bitte beginnen Sie wieder mit einer frischen Kopie der OpenGL-Programmiervorlage und laden Sie wieder Ihr Objekt.

Definieren Sie mit der GLM (bzw. via GLSLmath → siehe Cheat Sheet) den 3D Punkt bzw. Vertex $v = (0,1,0)$ und geben Sie ihn auf der Konsole aus.

Berechnen Sie die orthografische Projektionsmatrix $M_{P_{ortho}}$ mittels mat4::lglOrtho(...).

Transformieren Sie den Vertex $v$ mit dieser Projektionsmatrix und geben Sie den transfomierten Vertex aus.

Aufgabe 5.2: Trackball mit dem Framework

Das Framework hat die Möglichkeit, einen Trackball zur Verfügung zu stellen, bei dem man mit der Maus das dargestellte Objekt “greifen” und rotieren kann. Bauen Sie diesen Trackball in Ihr Programm ein.

Dazu muss einfach die Rotationsmatrix benutzt werden, die vom Framework von der lglGetManip() Funktion zurück geliefert wird. Diese Matrix muss auf die Grafikkarte geladen werden via lglLoadMatrix(). Vergessen Sie lglRender() und lglOrtho() nicht, um Ihr Objekt darzustellen!

Aufgabe 5.3: Trackball mit GLM

Das Framework multipliziert automatisch die Projektionsmatrix mit der Rotationsmatrix als Modellierungsmatrix. Nun berechnen wir die Gesamtmatrix selber mit der GLM und geben diese aus.

Transformieren Sie wieder den Vertex $v$ mit dieser Gesamtmatrix und geben Sie den transformierten Vertex fortlaufend aus.

Verwenden Sie außerdem wieder den Trackball.

Anschließend laden Sie diese Matrix auf die Grafikkarte. Vergessen Sie bitte nicht, lglOrtho() zu entfernen, da die orthografische Matrix ja bereits in der Gesamtmatrix enthalten ist!

Aufgabe 5.4: Seitenverhältnis des Fensters

Berechnen Sie die sog. aspect-ratio, d.h. das Seitenverhältnis des Framebuffers (wie z.B. 16:9 bei FHD).

Tipp: Breite und Höhe des Framebuffers → width() bzw. height()

Aufgabe 5.5: Perspektive mit der GLM


Strahlenverlauf einer Spiegelreflexkamera

Definieren Sie die drei Teilmatrizen aus der Hausaufgabe mit der GLM und geben Sie sie auf der Konsole aus.

Berechnen Sie die Gesamtmatrix $M_{MVP}$ durch Multiplikation der drei Teilmatrizen und geben Sie das Resultat wieder aus. Vergleichen Sie mit der Hausaufgabe!

Transformieren Sie den Vertex $v$ mit der Gesamtmatrix $M_{MVP}$ und geben Sie den transfomierten Vertex aus.

Aufgabe 5.6: MVP anwenden

Verwenden Sie nun die berechnete MVP-Matrix zum Zeichnen Ihres Objektes (lglLoadMatrix()).

Ggfls. müssen Sie Ihr Objekt noch mit Hilfe einer passenden Skalierungs- und Translationsmatrix an den sichtbaren Bereich des View-Frustums anpassen.

Aufgabe 5.7: Koordinatensysteme


OpenGL Koordinatensysteme

Das Framework bietet wie Blender vorgefertigte Meshes wie z.B. Würfel, Kugel, Kegel, Torus etc. (siehe Cheat Sheet). Insbesondere bietet es das Mesh lglCoordSys als Koordinatensystem mit drei beschrifteten Achsen.

Stellen Sie damit das lokale Koordinatensystem Ihres Objektes dar, d.h. das Koordinatensystem, welches mit dem Trackball rotiert wird.

Verwenden Sie dieses Mesh ebenfalls, um das System der Weltkoordinaten darzustellen. Was ist in diesem Fall zu erwarten? Nehmen Sie geeignete Anpassungen vor!

Aufgabe 5.8: Meshes (VBOs)


Ein nettes Spielzeug

Bauen Sie jetzt weitere Objekte bzw. Meshes in Ihr Programm ein. Lassen Sie die Objekte um sich selber rotieren. Versuchen Sie, mit geigneten Rotationen und Translationen die Objekte wie ein Planetensystem (Sonne/Erde/Mond) umeinander rotieren zu lassen.

Tipp: Dabei kommt man schnell durcheinander. Speichern Sie Sich Ihre jeweils letzte funktionierende Programmversion als Sicherheitskopie ab.

Experimentieren Sie mit der Farbe der Objekte (via lglColor()), der Reihenfolge der Rotationen und Translationen und der Skalierung verschiedener Meshes. Experimentieren Sie auch mit der nicht-uniformen Skalierung eines Würfels zu einem Quader, z.B für einen Satelliten.


Hausaufgaben bis zum sechsten Praktikum



Ein netter Ausziehtisch

1. Hierarchische Modellierung:

Ein Tisch besteht aus einer Arbeitsplatte und vier Beinen. Die Beine sind getrennt von der Tischplatte modelliert. Dabei sei $M_P$ die Projektion, $M_V$ die View-Transformation, $M_T$ die Modellierungstranformation, welche die Position (und Orientierung) des Tisches in der Welt beschreibt, und $M_{B_x}$ die vier Modellierungstransformationen, die beschreiben, wie man von der Tischposition zur Position des x-ten Beines kommt.

Zeichnen Sie den dazugehörigen Szenengraphen!

Und beschreiben Sie nun, wie die ModellViewProjection-Matrizen aufgebaut sind, um die einzelnen 5 Elemente zu rendern!

2. Hierarchische Modellierung, Coding:

Wie würde diese Aufgabe in der renderOpenGL() Methode des Frameworks aussehen? Nehmen Sie an, Sie haben die Funktionen zeichneTischplatte() und zeichneTischbein() zur Verfügung und die benötigten Matrizen stehen schon in den Variablen $M_P$, $M_V$, $M_T$, $M_{B_1}$, $M_{B_2}$, $M_{B_3}$ und $M_{B_4}$.

Tipp: Sie müssen nur jeweils für jeden Zeichenvorgang die ensprechende MV- und P-Matrix setzen (via lglProjection() und lglModelView()) und dann die jeweilige Zeichenroutine aufrufen. Da sich die Projektionsmatrix nicht ändert, muss diese nicht mehrfach gesetzt werden.

Options: