29.04.2015 Aufrufe

6. Übung zu Computergrafik 1

6. Übung zu Computergrafik 1

6. Übung zu Computergrafik 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!