Die Funktion colors berechnet aus der Lage und Grundfarbe der
transformierten, sichtbaren Polygone die Bildschirmfarben unter
Berücksichtigung von diffuser Relexion, Glanz und indirekter
Beleuchtung. Die Grundlagen dazu sind im Abschnitt
1.4 auf Seite
beschrieben.
Um einen Überlauf der Intensität zu verhindern, muss darauf
geachtet werden, dass die Summe aller prozentualen
Lichtintensitätsanteile kleiner als eins bleibt.
Zur Farbberechnung werden nun folgende Nebenbedingungen gesetzt:
Dies führt dann zu folgenden Formeln der Farbberechnung auf dem Bildschirm für rot, grün und blau (5.5 bis 5.7):
LN und HnN liegen zwischen 0.0 und 1.0, Polygon- und Ganzfarbe
können maximale Intensitätsfarben weiss (R=255, G=255, B=255)
haben. Somit ist gezeigt, dass die Intensität der Monitorfarben
nicht überschritten werden kann (
,
,
).
Ein weiteres Problem stellt der Referenzpunkt für den Glanz dar. Da
der Glanz abhängig vom Sichtrichtungsvektor
ist, müsste man
eigentlich die Farbe für jeden Punkt des Polygons neu berechnen.
Nimmt man aber an, das Polygon sei nicht all zu gross, kann ein guter
Kompromiss eingegangen werden, indem man den Schwerpunkt als
Referenzpunkt wählt; somit ist
für das ganze
Polygon ein konstanter Vektor.
Da die Berechnung von HnN relativ viel Zeit kostet, wird zuerst
mit NH > H_TEST getestet, ob ein Glanz vorhanden ist (highlight
test ).
Die Konstante H_TEST berechnet sich folgendermassen (5.8):
Mit der Berechnung von SN kann entschieden werden, welche Seite der Polygone sichtbar ist (Vor- oder Rückseite). Da für geschlossene Figuren die Rückseite der Polygone die Innenseite bilden, welche immer unsichtbar bleibt, werden solche Polygone als BACK_TO_SCREEN markiert und müssen nicht weiter behandelt werden. Für offene Figuren wird die Polygone in der aktuellen Implementation Schwarz gefärbt.
27
Abbildung 5.15: Pseudocode der Funktion