CGExercises

CG Exercise #04

Computergraphik Übungsblatt #04


Blender Tutorial: Animation & Rendering



OpenGL: Blender-Geometrie



Exported Blend File
as Alias WaveFront OBJ

Blend File
CC-BY DarkLimits Studios
modified for Eevee
by A. Kalisz

Aufgabe 4.1: Obj-Datei laden

TeilVideos des WS 2021/22Thema
OBJsYTGeometrie importieren bzw laden

Es wäre doch schön, ein eigenes graphisches Objekt für OpenGL zu verwenden anstelle von langweiligen Dreiecken. Dazu können Sie Ihr aktuelles Objekt in Blender im Alias WaveFront-Format (.obj) exportieren.

Beim Export sollten die folgenden Optionen ausgewählt sein:

  • Faces/Mesh triangulieren
  • Normalen schreiben
  • UV-Koordinaten schreiben
  • Modfier anwenden (z.B. Subdivision Surface)

Beim Export sollten die folgenden Optionen NICHT ausgewählt sein:

  • Materialeigenschaften schreiben
  • Nur ausgewähltes Objekt schreiben

Laden Sie Ihr eigenes Objekt mit der OpenGL-Programmiervorlage im Verzeichnis “qt_template”. Ihr exportiertes Objekt muss im selben Verzeichnis liegen. Dann laden Sie die Obj-Datei mit lglLoadObj(“filename”) in initializeOpenGL():

vbo = lglLoadObj("teapot.obj");

Dazu benötigen Sie eine entsprechende Instanzvariable vom Typ lglVBO* mit Namen vbo.

Testen Sie nun, ob die Datei korrekt geladen wurde, indem Sie überprüfen, ob die Instanzvariable einen NULL Zeiger enthält und brechen Sie das Programm in diesem Fall ab → exit(1).

Geben Sie weiterhin die Abmessungen Ihres Objektes aus, welche Sie mit der Methode lglGetExtent() erhalten (Ausgabe via operator <<).

Das geladene Objekt wird nun mit der Methode lglRender() in renderOpenGL() gezeichnet.

Es kann sein, dass die Abmessungen des Objektes zu groß sind, so dass Sie es erst skalieren müssen, um es sinnvoll rendern zu können. Verwenden Sie dazu den Befehl lglScale() in initializeOpenGL(). Der Teapot (Datei “teapot.obj”) muss z.B. mit dem Faktor 0.01 skaliert werden.


glVertex Cheat Sheet

Materialien:

  • OpenGL Cheat Sheet
  • OpenGL Programming Guide
  • Die Aufrufsyntax aller Framework-Funktionen wie lglRender() ist in der Klassendokumentation nachzulesen. Dazu öffnen Sie mit Firefox im Verzeichnis “docs/html” den Dokumentationsindex “index.html” und browsen die Dokumentation der Datei “glvertex_api.h”.

Aufgabe 4.2: Orthographische Projektion

Ihr Objekt wird noch verzerrt dargestellt, weil keine Projektion definiert ist. Verwenden Sie die folgende orthographische Projektion analog zu glOrtho (siehe auch OpenGL Programming Guide):

lglProjection(-1, 1, -1, 1, -1, 1)

Ihr Objekt wird nun immer noch verzerrt dargestellt, weil das Seitenverhältnis (aspect ratio) noch nicht berücksichtigt wird. Das Seitenverhältnis berechnet sich zu aspect = (float)width()/height(). An welchen zwei Stellen in obiger Projektion muss das Seitenverhältnis anstelle einer 1 verwendet werden?

Aufgabe 4.3: Obj-Datei animieren

Animieren Sie Ihr Objekt, indem Sie es rotieren lassen. Verwenden Sie dazu den Befehl lglRotate(). Um wieviel Grad müssen Sie das Objekt für jeden Frame rotieren, wenn Sie 30 fps annehmen und eine volle Umdrehung alle 3 Sekunden stattfinden soll?

Aufgabe 4.4: Z-Buffer

Schalten Sie testweise den Z-Buffer aus. Welchen lgl-Befehl bzw. welche Taste benötigen Sie dazu?

Aufgabe 4.5: Wireframe Darstellung

Stellen Sie Ihr Objekt im sog. Wireframe-Modus dar. Welchen lgl-Befehl benötigen Sie dazu?

Aufgabe 4.6: Model-View-Matrix

Nun geht es um Transformationen und homogene Koordinaten. Wir berechnen dazu mit Bleistift und Papier die folgenden 4×4 Matrizen:

  1. Affine Modellierungs-Transformation:
    Berechnen Sie die affine 4×4 Modellierungs-Matrix $M_M$, welche eine Rotation um 180 Grad um die Y-Achse und eine anschließende Translation um den Vektor (0,0,−5) repräsentiert.
  2. Viewing-Transformation:
    Berechnen Sie die View-Matrix $M_V$ einer Kamera, die an der Position (0,0,−10) steht und entlang der positiven Z-Achse schaut. Welcher Zusammenhang besteht zur Modellierungstransformation der Kamera?
  3. Was stellt ein homogener Vektor mit $w=0$ anschaulich dar?
  4. Was bedeutet also das Wort “homogen” in diesem Zusammenhang?
  5. Welche 3D Transformationen lassen Sich mit 3×3 bzw. 4×4 Matrizen darstellen:
    1. linear
    2. Translation
    3. Rotation
    4. Stauchung
    5. Perspektivische Projektion


Hausaufgaben bis zum fünften Praktikum


1. Hierarchische Modellierung / Blender:

  1. Ist es möglich in Blender bestimmte 3D-Objekte als Kinder von anderen Objekten zu definieren, so dass sich diese mit den Eltern mitbewegen? Falls ja, unter welchem Begriff kennt man dies in der Computergrafik und wo sieht man diese Beziehungen in Blender?
  2. Nehmen wir an, dass wir einen Würfel und eine Kugel in der Szene haben. Der Würfel ist noch nicht transformiert worden, die Kugel enthält eine reine Translation von (10, 0, 0). Außerdem ist die Kugel als ein Kind vom Würfel definiert. Welche Model-Matrix besitzt die Kugel, wenn der Würfel mit dem Vektor (0, 10, 0) transliert wurde. Erklären Sie Ihr Vorgehen.
  3. Optional: Welche Model-Matrix besitzt die Kugel, wenn sie zusätzlich noch um den Faktor 50% skaliert wird?

2. Animation:

  1. Zeichnen Sie mit dem OpenGL-Framework einen Einheitswürfel, der aus 6 verschiedenfarbigen LGL_QUADs besteht.
  2. Als nächstes soll dieser mit der Winkelgeschwindigkeit $\omega=30$ rotieren. Verwenden Sie den Funktionsparameter dt als $\Delta t$.
  3. Erstellen Sie ein neues Programm mit derselben Darstellung, aber für $\omega=100$.
  4. Optional: Verschieben Sie Ihr Objekt, indem Sie es mit einer Höhe $h$ translieren (mittels lglTranslate). Achtung: vergessen Sie nicht, die Verschiebung des letzten Frames am Anfang des nächsten Frames mit lglLoadIdentity() wieder rückgängig zu machen.
  5. Optional: Versuchen Sie, Ihr Objekt zusätzlich zur Rotation hüpfen zu lassen, indem Sie mit der Höhe $h$ translieren und die Höhe $h$ und die Fallgeschwindigkeit $v$ in jedem Frame anpassen:
    1. $v = v+G\Delta t$ mit $G=-9.81\frac{m}{s^2}$
    2. $h = h+v\Delta t$
    3. $v = -v$ für $h<0$

3. Projektions-Matrix / Perspektive:

  1. Stellen Sie das View-Frustum zeichnerisch dar für einen vertikalen Blickwinkel von 90 Grad, einem Bildseitenverhältnis von 16:9 und $near = 1$ bzw. $far = 3$.
  2. Schreiben Sie die allgemeine Formel für die normalisierte perspektivische Projektionsmatrix $M_P$ auf und erklären sie die vorkommenden Parameter.
  3. Wofür ist die −1 in der 3ten Spalte und 4ten Zeile zuständig?
  4. Was passiert mit Punkten außerhalb des Frustums?

4. Model-View-Projection-Matrix:

  1. Berechnen Sie die homogene 4×4 Model-View-Matrix $M_{MV}$ aus den Modellierungs- und Viewing-Matrizen von Präsenzübung 4.6.
  2. In welcher Reihenfolge müssen die obigen Matrizen multipliziert werden?
  3. Welcher Bereich des Weltkoordinatensystems ist bei Verwendung der Gesamt-Matrix $M_{MVP} = M_P \cdot M_{MV}$ sichtbar, d.h. welcher Abschnitt der globalen Z-Achse ist sichtbar?
  4. Angenommen, wir würden mit dieser MVP einen Einheitswürfel zeichnen. Welche Bereiche des Würfels wären sichtbar?
  5. Optional: Berechnen Sie die konkrete MVP mit dem Framework (als Vorbereitung für die kommende Übung).

Options: