Ãbungen zu den Lehrveranstaltungen 710.003 Computergrafik 1 ...
Ãbungen zu den Lehrveranstaltungen 710.003 Computergrafik 1 ...
Ãbungen zu den Lehrveranstaltungen 710.003 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.
Abbildung 27: Dreiecke rasterisiert mit Top-Left Fill-Convention.<br />
Visibility (3 Punkte) Ohne Berücksichtigung anderer Dreiecke und deren Tiefe, wer<strong>den</strong> Dreiecke einfach<br />
in der Reihenfolge, in welcher der Rasterizer sie bearbeitet gezeichnet. Da sich Dreiecke im Raum in<br />
der Regel natürlich gegenseitig verdecken oder gar durchdringen können ist dies für die Darstellung von<br />
3D Szenen un<strong>zu</strong>reichend. Um das Sichtbarkeitsproblem <strong>zu</strong> lösen bedienen wir uns eines Depth-Buffers<br />
(Z-Buffer). Dabei handelt es sich um einen <strong>zu</strong>sätzlichen Buffer in dem für je<strong>den</strong> Pixel ein Tiefenwert gespeichert<br />
wird. Bevor ein Pixel überschrieben wird, wird <strong>zu</strong>erst überprüft ob der Tiefenwert des neuen<br />
Pixels kleiner (Pixel liegt näher am Betrachter) oder gleich dem momentan im Depth-Buffer befindlichen<br />
Tiefenwert ist. Nur wenn dies der Fall ist wird der Pixel gezeichnet. So wer<strong>den</strong> alle Dreiecke unabhängig<br />
von ihrer Rasterisierungsreihenfolge immer korrekt dargestellt. Um diesen Algorithmus implementieren<br />
<strong>zu</strong> können muss für je<strong>den</strong> Pixel dessen Tiefenwert bekannt sein. Dieser wird berechnet indem nicht nur<br />
die Position sondern – nach dem selben Prinzip (DDA Algorithmus) – auch die Tiefenwerte der Vertices<br />
entlang der Kanten und dann von Beginn <strong>zu</strong>m Ende jeder Scanline linear interpoliert wer<strong>den</strong>.<br />
5.2 Programmgerüst<br />
Das <strong>zu</strong>r Verfügung gestellte Programmgerüst enthält bereits die notwendige Infrastruktur (Konfigurationsdatei<br />
einlesen, Ausgabebild speichern, etc.). Um die Übungsaufgabe <strong>zu</strong> lösen müssen nur noch die<br />
jeweiligen Metho<strong>den</strong> der Klasse Rasterizer entsprechend implementiert wer<strong>den</strong>:<br />
• Rasterizer::SetCamera(): Hier wer<strong>den</strong> die View- und Projectionmatrix berechnet.<br />
• Rasterizer::TransformVertex(): Diese Methode transformiert einen Vertex vom Worldin<br />
<strong>den</strong> Screenspace und liefert ein entsprechendes Objekt vom Typ ScreenVertex <strong>zu</strong>rück.<br />
• Rasterizer::RasterizeTriangle(): Implementiert das Rasterisieren eines Dreiecks.<br />
26