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: