Graphics Reference
In-Depth Information
Da die Abstände y konstant D 1 Pixel sind, ändert sich die Z-Tiefe auf der Scan-
line von Pixel zu Pixel um den konstanten Faktor
z D B = C
z ist eine Konstante in y-Richtung, sie gilt für die ganze Facette und braucht nur
einmal berechnet zu werden. Lediglich am Beginn einer Scanline - wenn sich die
x-Koordinate ändert - ist einmal die Anfangstiefe mit der Ebenengleichung zu er-
mitteln. Alle anderen Tiefen auf einer Scanline ergeben sich einfach durch Addition
von z( VStep ). Dieser Ablauf ist weit einfacher, als Z-Werte innerhalb der Facette
zu interpolieren.
Private Sub EbGlg()
'
Dim x1, y1, z1, x2, y2, z2, x3, y3, z3 As Double
'
' Koordinaten der Ecken
With Ecke(1) : x1 = .x : y1 = .y : z1 = .z : End With
With Ecke(2) : x2 = .x : y2 = .y : z2 = .z : End With
With Ecke(3) : x3 = .x : y3 = .y : z3 = .z : End With
'
' Ebenen-Gleichung aus Determinante
EbenA = (y2 - y1) * (z3 - z1) - (y3 - y1) * (z2 - z1)
EbenB = (z2 - z1) * (x3 - x1) - (z3 - z1) * (x2 - x1)
EbenC = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1)
EbenD = -EbenA * x1 - EbenB * y1 - EbenC * z1
'
VStep = IIf(EbenC = 0, 0.0, -EbenB / EbenC)
End Sub
Die Ebenenkonstante C wird sich immer dann D 0 ergeben, wenn eine Facette senk-
recht zur Projektionsebene steht. Bei kleinen C-Werten können sich nach Division
unsinnig große Z-Werte ergeben, was besagt, dass die Facette nahezu senkrecht auf
der Projektionsebene steht und in beiden Fällen nicht sichtbar ist.
Das Z-Buffer-Verfahren wird zwar zu den Bildraumverfahren gezählt, was aber
nicht zwangsläufig bedeutet, dass nur noch mit ganzzahligen Gerätekoordinaten
gerechnet wird. Vielmehr stützt man sich so lange wie möglich auf die Gleitkomma-
koordinaten der Darstellungstransformationen. Diese lassen sich leider nicht ohne
Verlust an Genauigkeit in ganzzahlige Gerätekoordinaten hvt überführen. Da aber
genau dies erforderlich ist, wird die dargestellte Szenerie letztendlich unmerklich
vom Original abweichen.
Ausgehend von den Projektionskoordinaten XYZ V der Darstellungstransforma-
tionen aus Kap. 8 lässt sich ein Z-Buffer-Programm wie folgt skizzieren:
Call Projektion()
Darstellungstransformationen und bereitstellen der Projektionskoordinaten.
Call AffinTrans()
Bildmaßstab festlegen; horizontale und vertikale Verschiebung auf Bild-
Search WWH ::




Custom Search