6. Ãbung zu Computergrafik 1
6. Ãbung zu Computergrafik 1
6. Ãbung zu Computergrafik 1
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>6.</strong> Übung <strong>zu</strong> <strong>Computergrafik</strong> 1<br />
Sommersemester 2011<br />
Jun.-Prof. Thorsten Grosch<br />
Abgabe bis Dienstag, den 24.05.2011 15:00 Uhr<br />
Aufgabe 1: View Frustum (4 Punkte)<br />
Gegeben sind folgende Projektionen:<br />
• glOrtho(-1, 1, -1, 1, 1, 2)<br />
• glOrtho(-3, -1, -3, -1, -1, 1)<br />
• glFrustum(-1,1, -1, 1, 3, 6)<br />
• glFrustum(1, 2, 1, 2, 2, 5).<br />
Die Reihenfolge der Parameter ist: left, right, bottom, top, near, far. Die Kamera ist mit gluLookAt(1, 0, 0, 0,<br />
0, -1, 0, 1, 0) gesetzt. Die Reihenfolge der Parameter ist: Ax, Ay, Az, Cx, Cy, Cz, ux, uy, uz. Skizzieren Sie,<br />
wie die resultierenden “Projektionsvolumen” von oben betrachtet aussehen. Die Blickrichtung führt entlang<br />
der negativen y-Achse. Im 2D-Diagramm zeigt die x-Achse des Weltkoordinatensystems nach rechts und<br />
die z-Achse nach vorne. Die Werte bottom und top können bei dieser Ansicht ignoriert werden.<br />
Aufgabe 2: Perspektivische Projektion (5 Punkte)<br />
Gegeben ist eine symmetrische, perspektivische Projektion mit gluPerspective(alpha, aspect, near, far).<br />
Berechnen Sie aus den Parametern von gluPerspective() die Parameter left, right, bottom, top, near und far<br />
für die äquivalente Projektion mit glFrustum().<br />
Aufgabe 3: Perspektivische Projektion (6 Punkte)<br />
Betrachten Sie den Würfel aus Aufgabe 4 vom 4. Übungsblatt: Setzen Sie jetzt die Kamera mit gluLookAt(0.5,<br />
0.5, 3.0, 0.5, 0.5, 1.0, 0.0, 1.0, 0.0), so daß man auf den Mittelpunkt der Vorderseite (z = 1) schaut.<br />
• Bestimmen Sie die Parameter einer perspektivischen Projektion mit glFrustum(...), so daß der Würfel<br />
die Hälfte der Fenstergröße hat (halbe Breite und halbe Höhe) und zentriert in der Mitte des Fensters erscheint.<br />
Setzen Sie dabei near = 1 und far = 4. Skizzieren Sie die Blickpyramide von oben.<br />
P 2 P 6<br />
Wie lauten die Koordinaten der Würfeleckpunkte und im Kamerakoordinatensystem und im Kanonischen<br />
Volumen (Würfel von -1 bis +1) ? Skizzieren Sie den Würfel im Kanonischen Volumen von oben.<br />
(Hinweis: Die Umrechnung ins Kanonische Volumen geschieht mit der glFrustum-Matrix, die Koordinaten<br />
der restlichen Würfeleckpunkte können durch Symmetrien bestimmt werden.)<br />
May 17, 2011 1
Aufgabe 4: Landschaft generieren (8 Punkte)<br />
In den nächsten Übungen soll ein einfacher Flugsimulator programmiert werden. Den Anfang macht das<br />
Gelände: Erweitern Sie hierfür die Klasse Terrain. Beim Anlegen des Terrains wird mit resolution die Ausdehnung<br />
des Terrains in Länge und Breite angegeben. Das Terrain liegt in der xz-Ebene im Bereich<br />
[0..resolution-1] x [0..resolution-1]. Die y-Werte für alle Positionen werden in dem Array mHeight gespeichert.<br />
Beim Initialisieren werden <strong>zu</strong>nächst alle Höhenwerte auf Null gesetzt, nur die Höhenwerte an den<br />
vier Eckpunkten bekommen einen <strong>zu</strong>fälligen Wert aus dem Bereich 0..interval. Mit der Methode<br />
getHeight(x,z) kann der Höhenwert and der Stelle (x,z) abgefragt werden, mit setHeight(x,z) kann die Höhe<br />
an der Stelle (x,z) eingetragen werden, wobei x und z einen ganzzahligen Wert aus dem Bereich<br />
0..resolution-1 haben müssen.<br />
a) Implementieren Sie die Funktion draw() <strong>zu</strong>m Zeichnen des Terrains. Das Terrain soll in mehreren Streifen<br />
als GL_TRIANGLE_STRIP im Wireframe Modus gezeichnet werden.<br />
y<br />
0 2 4 6 8<br />
x<br />
z<br />
2<br />
1<br />
1<br />
2<br />
Terrain mit<br />
Höhenwerten y(x,z)<br />
x<br />
1<br />
z<br />
b) Implementieren Sie das Diamond-Square Verfahren <strong>zu</strong>r Erzeugung eines fraktalen Gebirges. Aus den<br />
Höhenwerten der vier Eckpunkte des Rechtecks werden dabei fünf neue Höhenwerte generiert: Der Punkt in<br />
der Mitte erhält den Mittelwert der Höhenwerte der vier Eckpunkte plus einen Zufallswert. Die vier Mittelpunkte<br />
der Kanten erhalten den Mittelwert der Höhen der beiden anliegenden Eckpunkte plus einen Zufallswert.<br />
Danach wird das Verfahren rekursiv mit den vier Teilrechtecken wiederholt. Gestartet wird die<br />
Generierung mit dem gesamten Terrain, die Rekursion kann abgebrochen werden, falls Breite und Höhe des<br />
aktuellen Rechtecks kleiner als zwei sind. Die Zufallszahlen können positiv oder negativ sein und sollten im<br />
Bereich -interval..+interval liegen. Sie können hierfür die Hilfsfunktion random(float interval) verwenden.<br />
Der Bereich für die Zufallszahlen soll bei jedem Rekursionsaufruf halbiert werden.<br />
3<br />
5<br />
7<br />
9<br />
Punktreihenfolge<br />
für Triangle Strip<br />
z 1<br />
z 1 + z 2<br />
---------------<br />
2<br />
z 2<br />
x<br />
x 1<br />
+ x 2<br />
1 --------------- x 2<br />
2<br />
1 2<br />
3 4<br />
Diamond-Square Algorithmus<br />
: Mittelwert der Höhen der vier Eckpunkte<br />
+ Zufallszahl<br />
: Mittelwert der Höhen der beiden Punkte<br />
der Kante + Zufallszahl<br />
Danach Wiederholung mit den<br />
Rechtecken 1- 4<br />
May 17, 2011 2