Graphics Reference
In-Depth Information
Public Rot As Byte
}
Public Grun As Byte
}
jeweils 256 > Farbe >= 0
Public Blau As Byte }
Nachteilig und mit Rechenzeit verbunden ist die pixelweise Konvertierung in einen
Color -Wert bei der Ausgabe des Bildspeichers.
Diese Vorgehensweise ist vor allem geeignet bei Szenen, deren Facetten gleich-
mäßig eingefärbt sind. In diesem Falle kann man alternativ alle unterschiedlichen
Farben der ganzen Szenerie in eine separate Tabelle stellen und speichert nur einen
Zeiger auf diese Farbtabelle. Hierfür genügt eine 2-Byte-Variable, wenn weniger
als 32 767 verschiedene Farben verwendet werden. Bei der Ausgabe des Bildspei-
chers sind dann mittels Zeiger die Farben aus der Tabelle einzusetzen. Bei Farb-
verläufen infolge von Beleuchtung und Schattierung wird in beiden Varianten der
Rechenaufwand zu groß.
Mit dem jetzt im Farbmodell von VB.NET eingeführten ' Wert im ersten Byte
der Color-Variablen lässt sich Transparenz von Facetten nachbilden. Im Z-Buffer-
Verfahren ist dies allerdings nur partiell und nur mit viel Aufwand zu realisieren.
Der geringstmögliche Speicher wäre also folgender:
Public Structure Buffer
Public Zeiger As Short
' Zeiger auf Farb-Tabelle
2 Byte
Public Tiefe As Short
' ganzzahlige Z-Koordinate
2 Byte
End Structure
Für die Tiefe ist nicht unbedingt ein Gleitkommawert erforderlich. Skaliert man
nämlich die Szenerie in Z-Richtung so, dass alle Z-Werte ganzzahlig zwischen 0
und 32 767 liegen, dann genügt auch eine Short-Variable; oben bereits verwendet.
Da permanent Tiefe werte verglichen werden, sind Vergleiche mit Ganzzahlen deut-
lich schneller als mit Gleitkommazahlen. Um das Aufspalten der RGB-Farbanteile
zu vermeiden, wird hier folgende Datenstruktur verwendet:
Public Structure Buffer
Public Farbe As Color
' Pixelfarbe
4 Byte
Public Tiefe As Short
' Z-Koordinate
2 Byte
End Structure
Verknüpft man für die Ausgabe den Farbepuffer beispielsweise unmittelbar mit dem
PictureBox-Steuerelement, dann stört in dieser Datenstruktur der Tiefewert. Es ist
dann zweckmäßig anstatt der Datenstruktur „Buffer“ beide Variablen als einzelne
Arrays zu verwenden:
Public Farbe(600,800) As Color
Public Tiefe(600,800) As Short
Nach diesen Betrachtungen über den RAM-Verbrauch des Bildspeichers ist klar,
dass die zu erwartende Rechenzeit irgendwie proportional zu dessen Größe sein
wird, die Anzahl und Größe von Facetten ist dagegen nachrangig.
Search WWH ::




Custom Search