gl.Light(light, pname, param)
gl.Light()
setzt die Werte der einzelnen Lichtquellenparameter. light
bezeichnet das Licht und ist ein symbolischer Name der Form #GL_LIGHTi
,
wobei i
von 0 bis zum Wert von #GL_MAX_LIGHTS
- 1 reicht. pname
gibt
einen von zehn Lichtquellenparametern an, wiederum durch einen symbolischen
Namen. param
ist entweder ein einzelner Gleitkommawert oder eine Tabelle,
die mehrere Gleitkommawerte enthält. Dies hängt vom Parameter pname
ab.
Um die Lichtberechnung zu aktivieren und zu deaktivieren, rufen Sie
gl.Enable() und gl.Disable() auf mit
dem Argument #GL_LIGHTING
. Die Beleuchtung ist zunächst deaktiviert. Wenn sie
aktiviert ist, tragen aktivierte Lichtquellen zur Lichtberechnung bei. Die
Lichtquelle i wird mit gl.Enable() und gl.Disable()
zusammen mit dem Argument #GL_LIGHTi
aktiviert und deaktiviert.
Die zehn Lichtparameter sind wie folgt:
#GL_AMBIENT
param
muss vier Gleitkommawerte enthalten, die die RGBA-Umgebungsintensität
des Lichts angeben. Die anfängliche Umgebungshelligkeit ist (0, 0, 0, 1).
#GL_DIFFUSE
param
muss vier Gleitkommawerte enthalten, die die diffuse RGBA-Intensität
des Lichts angeben. Der Anfangswert für #GL_LIGHT0
ist (1, 1, 1, 1); für
andere Lichtquellen ist der Anfangswert (0, 0, 0, 1).
#GL_SPECULAR
param
muss vier Gleitkommawerte enthalten, die die RGBA-Spiegelintensität
des Lichts angeben. Der Anfangswert für #GL_LIGHT0
ist (1, 1, 1, 1); für
andere Lichtquellen ist der Anfangswert (0, 0, 0, 1).
#GL_POSITION
param
muss vier Gleitkommawerte enthalten, die die Position des Lichts in
homogenen Objektkoordinaten angeben. Die Position wird durch die
Modellsichtmatrix transformiert, wenn gl.Light()
aufgerufen wird (als wäre
es ein Punkt), wird sie in Augenkoordinaten gespeichert. Wenn die
w-Komponente der Position 0 ist, wird das Licht als gerichtete Quelle
behandelt. Bei der Berechnung von diffuser und spiegelnder Beleuchtung
wird die Richtung des Lichts, nicht aber seine tatsächliche Position
berücksichtigt und die Dämpfung ist deaktiviert. Andernfalls basieren
die Berechnungen der diffusen und spiegelnden Beleuchtung auf der
tatsächlichen Position des Lichts in den Augenkoordinaten und die
Dämpfung ist aktiviert. Die Ausgangsposition ist (0, 0, 1, 0);
somit ist die Ausgangslichtquelle ausgerichtet, parallel zur und in
Richtung der -z-Achse.
#GL_SPOT_DIRECTION
param
muss drei Gleitkommawerte enthalten, die die Richtung des Lichts in
homogenen Objektkoordinaten angeben. Die Spotrichtung wird beim Aufruf von
gl.Light()
durch die oberen 3x3 der Modellsichtmatrix transformiert und in
Augenkoordinaten gespeichert. Es ist nur dann von Bedeutung, wenn
#GL_SPOT_CUTOFF
nicht 180 ist, was es ursprünglich ist. Die Anfangsrichtung
ist (0, 0, -1).
#GL_SPOT_EXPONENT
param
muss ein einzelner Gleitkommawert sein, der die Intensitätsverteilung
des Lichts angibt. Es werden nur Werte im Bereich (0, 128) akzeptiert. Die
effektive Lichtintensität wird durch den Kosinus des Winkels zwischen der
Richtung des Lichts und der Richtung vom Licht zum beleuchteten Scheitelpunkt
gedämpft, erhöht um die Kraft des Punkt-Exponenten. Höhere Punkt-Exponenten
führen somit zu einer fokussierteren Lichtquelle, unabhängig vom Punktabschaltwinkel
(siehe #GL_SPOT_CUTOFF
, nächster Absatz). Der anfängliche Punkt-Exponent ist 0,
was zu einer gleichmäßigen Lichtverteilung führt.
#GL_SPOT_CUTOFF
param
muss ein einzelner Gleitkommawert sein, der den maximalen Streuwinkel
einer Lichtquelle angibt. Es werden nur Werte im Bereich (0, 90) und der
Sonderwert 180 akzeptiert. Wenn der Winkel zwischen der Richtung des Lichts
und der Richtung vom Licht zum beleuchteten Scheitelpunkt größer ist als der
Punktabschaltungswinkel, ist das Licht vollständig verdeckt. Ansonsten wird
seine Intensität durch den Punkt-Exponenten und die Dämpfungsfaktoren
gesteuert. Die anfängliche Punktabschaltung beträgt 180, was zu einer
gleichmäßigen Lichtverteilung führt.
#GL_CONSTANT_ATTENUATION
param
muss ein einzelner Gleitkommawert sein, der einen der drei
Lichtdämpfungsfaktoren angibt. Es werden nur positive Werte akzeptiert.
Wenn das Licht nicht ausgerichtet, sondern positionell ist, wird seine
Intensität durch den Kehrwert der Summe aus dem konstanten Faktor, dem linearen
Faktor mal dem Abstand zwischen dem Licht und dem beleuchteten Scheitelpunkt
und dem quadratischen Faktor mal dem Quadrat des gleichen Abstands
abgeschwächt. Die anfänglichen Dämpfungsfaktoren sind (1, 0, 0), was zu
keiner Dämpfung führt.
#GL_LINEAR_ATTENUATION
#GL_CONSTANT_ATTENUATION
oben.
#GL_QUADRATIC_ATTENUATION
#GL_CONSTANT_ATTENUATION
oben.
Es ist immer der Fall, dass #GL_LIGHTi
= #GL_LIGHT0
+ i ist.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
pname
, siehe oben)#GL_INVALID_ENUM
wird generiert, wenn entweder light
oder pname
kein akzeptierter Wert ist.
#GL_INVALID_VALUE
wird erzeugt, wenn ein Punkt-Exponentenwert außerhalb des
Bereichs (0, 128) angegeben ist, oder wenn eine Punktabschaltung außerhalb
des Bereichs (0, 90) (außer dem Sonderwert 180) angegeben ist, oder wenn
ein negativer Dämpfungsfaktor angegeben ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.Light()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
gl.IsEnabled() mit dem Argument #GL_LIGHTING