11.03.2014 Aufrufe

Vorlesungsskript Computergraphik II - IWR

Vorlesungsskript Computergraphik II - IWR

Vorlesungsskript Computergraphik II - IWR

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

2.4. ÜBUNGSAUFGABEN 41<br />

wobei u 0 die Wärmeverteilung zu Beginn und u τ die Wärmeverteilung zum Zeitpunkt τ beschreibt.<br />

Diskretisiert man den Laplace-Operator mittels finiter Differenzen, so ergeben sich die Gleichungen<br />

(1 + 4τ)u i,j<br />

τ<br />

− τ(u i−1,j<br />

τ<br />

+ u i+1,j<br />

τ<br />

+ u i,j−1<br />

τ<br />

+ u i,j+1<br />

τ ) = u i,j<br />

0 ∀ i, j<br />

in denen die Indizes i und j die Raumkoordinaten der einzelnen Gitterpunkte angeben. Das Gleichungssystem<br />

soll mit Hilfe des Jacobi-Verfahrens gelöst werden für das sich folgende Iterationsvorschrift<br />

ergibt<br />

u i,j<br />

neu =<br />

1<br />

(1 + 4τ) (τ(ui−1,j alt<br />

+ u i+1,j<br />

alt<br />

+ u i,j−1<br />

alt<br />

+ u i,j+1<br />

alt<br />

) + u i,j<br />

0 ).<br />

Implementieren Sie dieses numerische Lösungsverfahren, wobei die einzelnen Iterationsschritte des<br />

Jacobi-Verfahrens in einem Fragment-Shader berechnet werden. Gehen Sie dabei wie folgt vor:<br />

(a) Laden Sie von der Vorlesungswebseite die Datei waves.png herunter. Schreiben Sie zunächst<br />

ein OpenGL Programm mit zweidimensionalem Weltkoordinatensystem, so dass jeder Texel dieser<br />

Textur genau auf einen Pixel des Ausgabefensters abgebildet wird. Setzen Sie die Texturfilter auf<br />

GL NEAREST um Interpolationsfehler zu vermeiden. Die vorgegebene Textur ist ein Graustufenbild.<br />

Da später mehr als ein Farbkanal benötigt wird, übertragen Sie die Textur im RGB-Format an die<br />

Graphikkarte, wobei die drei Kanäle R, G und B jeweils mit dem Grauwert des entsprechenden Texels<br />

initialisiert werden.<br />

(b) Erweitern Sie dieses Programm um einen Fragment-Shader, der die Auswertung der Textur übernimmt.<br />

(c) Implementieren Sie eine idle-Funktion, die mit Hilfe des Befehls glCopyTexSubImage2D(...)<br />

den Inhalt des aktuellen Color-Buffer in die Textur kopiert und anschließend das Bild neu zeichnet.<br />

(d) Nach hinreichend vielen Jacobi-Iterationen ist das Gleichungssystem näherungsweise gelöst.<br />

Speichern Sie nach 120τ Aufrufen der idle-Funktion den aktuellen Inhalt des Color-Buffers in eine<br />

Datei und beenden Sie das Programm. Der Color-Buffer kann mit der Funktion glReadPixels(...)<br />

ausgelesen werden.<br />

(e) Implementieren Sie zum Abschluss das Jacobi-Verfahren in Ihrem Fragment-Shader. Verwenden<br />

Sie den Rot-Kanal zur Speicherung des Iterationsfortschritts und den Grün-Kanal zur Speicherung<br />

der rechten Seite u 0 des Gleichungssystems. Um die Pixel am Rand des Bildes korrekt zu verarbeiten,<br />

genügt es die Wrapping-Parameter für die Texturkoordinaten auf GL CLAMP zu setzen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!