Graphics Reference
In-Depth Information
kanz = Offset + LineEnd - LineAnf
'
' Anfangswert der Tiefe
Tief = -(EbenA * kordh + EbenB * LineAnf + EbenD) / EbenC
If Tief < 32767.0 And Tief > 0.0 Then
'
' Scanline
For idx = Offset To kanz
Temp = Tief
If Temp < Tiefe(idx) Then
Tiefe(idx) = Temp
Farbe(idx) = MyColor
End If
Tief += VStep
' Tiefe-Änderung
Next idx
End If
End Sub
Ausgabe des Bildspeichers (pixelweise)
picBild = frmGrafik.DefInstance.picBild.CreateGraphics()
picBild.Clear(frmGrafik.DefInstance.picBild.BackColor)
'
' Elemente zeichnen
myPen.Width = 1
idx = 0
Fork=0ToHorzPic
Forj=0ToVertPic
idx = idx + 1
myPen.Color = Farbe(idx)
picBild.DrawRectangle(myPen, k, j, 1, 1)
Next j
Next k
Exakt auf der Schnittkante zweier Facetten liegen nur die beiden Eckknoten der
Kante. Alle Pixel dazwischen weichen mehr oder weniger stark vom exakten Kan-
tenverlauf ab, folglich sind auch die für die Pixel-Position berechneten Z-Werte
nicht identisch mit jenen für den exakten Kantenverlauf. Dieser Sachverhalt gilt
auch für die zweite Facette, sodass die berechneten Z-Werte - und damit die Farben
der Pixel - an der Kante mal von der einen, mal von der anderen Facette bestimmt
werden. Das führt zu einem ausgefransten Farbverlauf an den Schnittkanten. Dieser
Effekt tritt umso stärker in Erscheinung, je „orthogonaler“ zwei Facetten zueinander
stehen.
Abschließend ein Vergleich der beiden Visualisierungen unseres Quaders (siehe
auch Skizze in Abb. 9.16 ), links mit dem Painter, rechts mit dem Z-Buffer. Die hier
verwendete Zentralprojektion mit einem recht kurzen Abstand des Beobachters zur
Projektionsebene führt zu größeren Verzerrungen, wobei die Seitenwand mit den
Ecken 3-7-8-4 vollständig abgedeckt wird.
Search WWH ::




Custom Search