CGExercises

Exercise #07

Computergraphik Übungsblatt #07


OpenGL Tutorial: Texturen



Aufgabe 7.1: Textur

Starten Sie mit Ihrem Code aus Übung #06.

Suchen Sie sich eine Textur (d.h. ein Bild im jpg oder png Format) aus, das Sie auf Ihren Roboter kleben möchten.

Laden Sie das Bild mit dem Framework mittels lglLoadQtTexture(). Binden Sie das entstandene Texture Objekt via lglTexture2D().

Aufgabe 7.2: Textur-Koordinaten


Textur-Atlas
für einen Würfel

Erstellen Sie zusätzlich einen VBO, der die Seitenquader eines Würfels enthält. Definieren Sie für die Quader entsprechende Texturkoordinaten, so dass Sie den abgebildeten Texturatlas mit einer 4×4 Kachelung verwenden können. Diesen Würfel platzieren Sie z.B. auf der Bodenplatte des Roboters.

Aufgabe 7.3: Tri-Stripping

Verwenden Sie nun Tri-Stripping (d.h. LGL_TRIANGLE_STRIP), um dasselbe Ergebnis zu erzeugen.


Aufgabe 7.4: Backface-Culling

Verwenden Sie nun Backface-Culling (siehe Cheat-Sheet).

Die Darstellung ist nun evtl. fehlerhaft. Korrigieren Sie dies, indem Sie die Reihenfolge der Vertices ändern.


Hausaufgaben bis zum achten Praktikum


1. OpenGL / Tri-Stripping:

  1. Wieviele Vertices haben wir im Falle eines Würfels eingespart?
  2. Wieviele Vertices sparen wir zusätzlich durch Backface-Culling ein?
  3. Kennen Sie eine Methode, um einen Würfel mit einem einzigen Strip darzustellen? Was würden Sie an Ihrem Code ändern?

2. OpenGL / GLSL:

  1. Skalieren Sie den übergebenen Vertex im Vertex-Shader auf ein Viertel seiner ursprünglichen Größe. Wie sieht die Zweisung zu gl_Position aus? Achtung: homogene Koordinaten!
  2. Interpolieren Sie einen Farbwert im Fragment-Shader mit Hilfe einer Linearkombination. Im Ergebnis soll die Farbe 25% Weiss, 55% Rot und 20% Gelb enthalten. Wie sieht die Zweisung zu gl_FragColor aus?
  3. Interpolieren Sie einen Farbwert im Fragment-Shader mit Hilfe einer linearen Interpolation mit einem normalisierten Interpolationsfaktor $w\in[0,1]$. Im Ergebnis soll die Farbe w% Weiss und der restliche Farbanteil Rot sein mit $w=34.56789$%. Wie sieht die Zweisung zu gl_FragColor aus?
  4. Interpolieren Sie einen Farbwert im Fragment-Shader mit Hilfe einer linearen Interpolation. Im Ergebnis soll die Farbe w% Weiss und der restliche Farbanteil Rot sein. Hierbei soll w den Bereich von 0–100% abdecken, je nachdem wie weit das Fragment vom Betrachter weg ist. Verwenden Sie dazu gl_FragPos.z mit einem Wertebereich von −1 bis 1, das Sie auf den Wertebereich von 0 bis 1 abbilden müssen, damit dies als normalisierter Interpolationsfaktor verwendet werden kann.

3. 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;
}
Warum müssen die Parameter mit inout deklariert werden?

4. 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);

Options: