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?


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. Transformationen und homogene Koordinaten:

  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

4. 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?

5. Model-View-Matrix:

  1. Berechnen Sie die homogene 4×4 Model-View-Matrix $M_{MV}$ aus den obigen zwei Modellierungs und Viewing-Matrizen.
  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 sind sichtbar?

Hinweis: Diese Hausaufgabe ist zugegebenerma├čen anspruchsvoll und erfordert einen entsprechenden Zeitaufwand. Dieser Aufwand ist aber f├╝r den weiteren Fortschritt notwendig. Ohne ein vertieftes Verst├Ąndnis der MVP sind alle weiteren Aufgaben halt leider nicht zu bearbeiten (die Pr├╝fung auch nicht ;-). Der Aufwand f├╝r die nachfolgenden Hausaufgaben ist entsprechend als Ausgleich wieder geringer.

Options: