Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
Vorlesungsskript Computergraphik II - IWR
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.