From CoGr@Ohm
Starten Sie mit Ihrem Code aus der vorhergehenden Übung #06.
Suchen Sie sich eine beliebige Textur (d.h. ein Bild im jpg oder png Format) aus.
Laden Sie das Bild mit dem Framework mittels lglLoadQtTexture(“image.png”) (siehe Cheat Sheet → Texturing). Sie erhalten die Id eines sog. Textur-Objektes. Binden bzw. aktivieren Sie das Textur-Objekt via lglTexture2D(tex_id). Die Id 0 deaktiviert die Texturierung.
Material und Links:
Erstellen Sie von Hand einen VBO mit dem Framework [1], der die 6 Seitenquader eines Würfels enthält (LGL_QUADS). Den Würfel platzieren Sie z.B. auf der Bodenplatte des Roboters.
Definieren Sie für jeden der 6 Quader entsprechende Texturkoordinaten, so dass Sie den rechts abgebildeten Texturatlas verwenden können. Der Textur-Atlas hat eine 4×4 Kachelung.
Zum besseren Verständnis skizzieren sie zuerst einmal den Würfel von Hand und nummerieren die Vertices in der Skizze durch. Dann vollziehen Sie anhand der Zeichnung die Vertices nach, die für den jeweiligen Quad benötigt werden. Dasselbe gilt für die Texturkoordinaten, d.h. tragen Sie auch in den Texturatlas entsprechende Nummern ein.
Verwenden Sie nun Tri-Stripping [2] (d.h. LGL_TRIANGLE_STRIP anstelle von LGL_QUADS), um denselben texturierten Würfel mit drei Strips zu definieren (Deckel, Seiten und Boden).
Zum besseren Verständnis skizzieren sie zuerst einmal den Würfel von Hand und nummerieren die Vertices durch. Dann vollziehen Sie anhand der Zeichnung die Vertices nach, die für den jeweiligen Triangle Strip benötigt werden.
Verwenden Sie nun Backface-Culling [3] → lglBackFaceCulling
.
Die Darstellung ist nun evtl. fehlerhaft. Korrigieren Sie dies, indem Sie die Reihenfolge der Vertices ändern.
In dieser Aufgabe führen wir eine Code-Recherche zum Thema MipMapping durch. D.h. wir analysieren die Funktion lglCreate2DMipMap() des Frameworks, welche eine MipMap-Hierarchie der Texturdaten [4] erzeugt.
Vollziehen Sie die einzelnen dazu notwendigen Schritte im Quelltext des Frameworks mit Hilfe des Debuggers von QtCreator nach (RTFC)! Starten Sie als Ausgangspunkt für die Recherche mit der Funktion lglLoadQtTexture, welche nach einigen Schritten die Funktion lglCreate2DMipMap aufruft.
Als Ergebnis der Recherche notieren Sie bitte die Reihenfolge der OpenGL-Befehle, welche das Framework für die Erzeugung einer MipMap aufruft?
Tipps:
Angenommen, Sie würden das selber nachimplementieren wollen, wieviel Stunden reine Programmierarbeit würden Sie dafür ansetzen?
Optional: Implementieren Sie eine rudimentäre Version des MipMapping selber (und ohne zu spicken). Vergleichen Sie Ihren tatsächlichen Aufwand mit Ihrer Schätzung.
Exportieren Sie Ihr Blender-Objekt als OBJ mit UV-Koordinaten. Stellen Sie das Objekt mit der entsprechenden Textur neben dem Roboter und dem Würfel dar. Alternativ können Sie diese OBJ und PNG Dateien verwenden, welche zusammen einen texturierten Hai darstellen.
1. OpenGL / Tri-Stripping:
2. OpenGL / GLSL:
3. GLSL / Parameter:
Für welche der folgenden Werte macht es Sinn, ein Attribut, einen uniformen Parameter oder einen varying Parameter zu verwenden?
4. Optional: GLSL / Funktionen:
Wie würden Sie die folgende GLSL-Funktion in C++ schreiben?
void swap(inout float a, inout float b) { float t; t = a; a = b; b = t; }
5. GLSL / Konstruktoren & Swizzling:
Beschreiben die folgenden Konvertierungen mit einem einzigen Swizzling; dabei sei v4 ein 4er-Vektor, v2 ein 2er-Vektor, f ein float. Benutzen Sie ausschließlich die Swizzling-Komponenten x, y, z und w! Die erste Zeile dient als Beispiel.
float a = float(v4); --> float a = v4.x; vec3 b = vec3(v4); vec3 c = vec3(v4.b, v4.g, v4.r); vec4 d = vec4(f, f, f, f); vec4 e = vec4(v2, v2);
Retrieved from http://schorsch.efi.fh-nuernberg.de/cogr/index.php/CGExercises/Exercise07
Page last modified on December 22, 2020, at 02:39 PM