Zur Rasterisierung von Polygonen mit versteckten Flächen können grundsätzlich zwei Methoden verwendet werden:
Bei diesem Algorithmus (1.6) wird Polygon um Polygon gezeichnet. Die Tiefe
z(x,y) und die Intensität I(x,y) aller Punkte x,y innerhalb des
Polygons (Abbildung 1.5 auf Seite
)
errechnet sich aus Tiefe und Intentität an den Eckpunkten,
und zwar durch eine erste Interpolation über die aktuelle
Polygonkante (1.31 und 1.32) und
eine zweite über die Zeile vom linken zum rechten Kantenrand des
Polygons (1.33).
Abbildung: Interpolation über Zeile und Kanten
Die Formel für die Interpolation ist:
27
Abbildung 1.6: Z-Buffer Algorithmus
Wird bei der Berechnung der Intensität zusätzlich ein Glanz
berücksichtigt, müssen die Vektoren
(x,y) und
(x,y)
anstelle der Intensität I(x,y) interpoliert werden. Die Intensität
wiederum wird dann neu aus
und
berechnet.
Der Z-Buffer dient zur Erkennung von verdeckten Flächen (hidden surface). Falls der berechnete z-Wert kleiner ist als der entsprechende Wert im Z-Buffer, soll der Punkt des Polygons gezeichnet und der neue z-Wert in den Z-Buffer gespeichert werden. Anderenfalls soll der alte Wert im Z-Buffer bleiben.
Die Idee der Scanline-Algorithmen besteht darin, dass man den Bildschirmbereich Zeile für Zeile zeichnet. Somit kann das Problem sequentiell abgearbeitet werden. Eine Parallelisierung ist relativ einfach zu realisieren, indem man jedem Prozessor einen Teil des Bildschirmausschnittes gibt. Mit einem Loadbalancing lässt sich die Arbeit optimal verteilen.
Der Z-Buffer-Scanline (1.7) hat gegenüber dem allgemeinen Z-Buffer Algorithmus einen grossen Vorteil: Da immer eine Zeile vollständig abgearbeitet wird, braucht der Z-Buffer nur ein Pixel hoch zu sein.
27
Abbildung 1.7: Z-Buffer-scanline Algorithmus
Ein sehr schneller und effizienter jedoch komplexer Algorithmus ist der
Spanning-Scanline Algorithmus. Die Tests für verdeckte Flächen
werden nicht mehr in jeder Zeile gemacht, sondern nur noch bei
Kantenbeginn, Kantenende und bei Überschneidungen von Kanten. Die einzelnen
Spans werden in jeder Zeile inkrementell aus der letzten berechnet und
daraus erzeugt man einen Run-Length-Code für die Farben. Eine
ausführliche Beschreibung ist in Kapitel
2 auf Seite
zu finden. Abbildung
2.1 auf Seite
zeigt den Pseudocode des Spanning-Scanline-Algorithmus.