gl.LightModel(pname, param)
gl.LightModel()
setzt den Parameter des Beleuchtungsmodells. pname
benennt
einen Parameter und param
gibt den neuen Wert an. Es gibt drei Parameter
für das Beleuchtungsmodell:
#GL_LIGHT_MODEL_AMBIENT
param
muss vier Gleitkommawerte enthalten, die die Umgebungs-RGBA-Intensität
der gesamten Szene angeben. Die anfängliche Intensität der Umgebungsszene ist
(0.2, 0.2, 0.2, 1.0).
#GL_LIGHT_MODEL_LOCAL_VIEWER
param
muss ein einzelner Gleitkommawert sein, der angibt, wie spiegelnde
Reflexionswinkel berechnet werden. Wenn param
gleich 0 ist, nehmen spiegelnde
Reflexionswinkel die Blickrichtung parallel zur und in Richtung der -z Achse
an, unabhängig von der Position des Scheitelpunktes in Augenkoordinaten.
Andernfalls werden Spiegelreflexionen aus dem Ursprung des
Augenkoordinatensystems berechnet. Der Anfangswert ist 0.
#GL_LIGHT_MODEL_TWO_SIDE
param
muss ein einzelner Gleitkommawert sein, der angibt, ob ein- oder
zweiseitige Lichtberechnungen für Polygone durchgeführt werden. Sie hat
keinen Einfluss auf die Lichtberechnungen für Punkte, Linien oder Bitmaps.
Wenn param
gleich 0 ist, wird eine einseitige Beleuchtung angegeben und
es werden nur die Materialparameter der Vorderseite in der
Beleuchtungsgleichung verwendet. Andernfalls ist eine zweiseitige
Beleuchtung vorgesehen. In diesem Fall werden die Scheitelpunkte von
nach hinten gerichteten Polygonen mit den Parametern des nach hinten
gerichteten Materials beleuchtet und ihre Normalen umgekehrt, bevor die
Beleuchtungsgleichung ausgewertet wird. Eckpunkte von nach vorne
gerichteten Polygonen sind immer unter Verwendung der vorderen
Materialparameter beleuchtet, ohne Änderung ihrer Normalen. Der
Anfangswert ist 0.
Im RGBA-Modus ist die beleuchtete Farbe eines Scheitelpunktes die Summe aus der Materialemissionsintensität, dem Produkt aus dem Materialumgebungsreflexionsgrad und der Vollbildumgebungsintensität des Beleuchtungsmodells sowie dem Beitrag jeder aktivierten Lichtquelle. Jede Lichtquelle trägt die Summe von drei Teilen bei: Ambient, diffus und specular. Der Beitrag der Umgebungslichtquelle ergibt sich aus dem Produkt aus dem Material Umgebungsreflexionsgrad und der Umgebungsintensität des Lichts. Der Beitrag der diffusen Lichtquelle ist das Produkt aus der diffusen Material-Reflexion, der diffusen Intensität des Lichts und dem Punktprodukt der Normalität des Scheitels mit dem normierten Vektor vom Scheitelpunkt zur Lichtquelle. Der Beitrag der spiegelnden Lichtquelle ist das Produkt aus dem Materialspiegelreflexionsgrad, der Spiegelintensität des Lichts und dem Punktprodukt der normierten Scheitel-Augen- und Scheitel-Licht-Vektoren, womit die Kraft des Glanzes des Materials erhöht werden. Alle drei Lichtquellenbeiträge werden gleichmäßig gedämpft, basierend auf dem Abstand vom Scheitelpunkt zur Lichtquelle und der Lichtquellenrichtung, dem Spreizexponenten und dem Spreizwinkel. Alle Punktprodukte werden durch 0 ersetzt, wenn sie zu einem negativen Wert berechnet werden.
Die Alpha-Komponente der resultierenden leuchtenden Farbe wird auf den Alpha-Wert des Materials diffuser Reflexionsgrad eingestellt.
Im Farbindexmodus reicht der Wert des beleuchteten Index eines Scheitels von
der Umgebung bis zu den an gl.Material() übergebenen
Spiegelungswerten mit #GL_COLOR_INDEXES
. Diffuse und spiegelnde Koeffizienten,
berechnet mit einer (.30, .59, .11) Gewichtung der Lichtfarben, des Glanzes
des Materials und den gleichen Reflexions- und Dämpfungsgleichungen wie im
RGBA-Fall, bestimmen, wie weit über der Umgebung der resultierende Index liegt.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
pname
, siehe oben)#GL_INVALID_ENUM
wird erzeugt, wenn pname
kein akzeptierter Wert ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.LightModel()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_LIGHT_MODEL_AMBIENT
gl.Get() mit dem Argument #GL_LIGHT_MODEL_LOCAL_VIEWER
gl.Get() mit dem Argument #GL_LIGHT_MODEL_TWO_SIDE
gl.IsEnabled() mit dem Argument #GL_LIGHTING