glLightModel

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glLightModel

Name

glLightModel - setzt Parameter für das Beleuchtungsmodel.


Delphi-Spezifikation

procedure glLightModelf(pname: TGLenum; param: TGLfloat);
procedure glLightModeli(pname: TGLenum; param: TGLint);


Parameter

pname Spezifiziert einen Lichtparameter der nur einen Wert erwartet.
GL_LIGHT_MODEL_LOCAL_VIEWER, GL_LIGHT_MODEL_TWO_SIDE und GL_LIGHT_MODEL_COLOR_CONTROL werden akzeptiert.
param Enthält den Wert auf den pname gesetzt werden soll.


Delphi-Spezifikation

procedure glLightModelfv(pname: TGLenum; const params: PGLfloat);
procedure  glLightModeliv(pname: TGLenum; const params: PGLint);


Parameter

pname Spezifiziert einen Lichtparameter. Akzeptiert werden:
'GL_LIGHT_MODEL_AMBIENT, GL_LIGHT_MODEL_LOCAL_VIEWER,' GL_LIGHT_MODEL_TWO_SIDE und GL_LIGHT_MODEL_COLOR_CONTROL.
params Ist ein Zeiger auf den oder die Werte auf die pname gesetzt werden soll.


Beschreibung

glLightModel setzt die Eigenschaften für das Beleuchtungsmodel. pname bezeichnet dabei die Eigenschaft und params den oder die Werte welche der Eigenschaft zugewiesen werden sollen.

GL_LIGHT_MODEL_AMBIENT

params enthält vier Ganzahl- oder Fließkommawerte, welche die ambiente RGBA-Intensität der gesamten Szene spezifizieren.
Ganzzahlen werden linear auf das Intervall [-1.0, 1.0] umgerechnet. Dies geschieht so, dass der größte Integerwert zu 1.0 und der kleinste zu -1.0 wird. Fließkommazahlen werden direkt übertragen, und weder Ganz- noch Fließkommazahlen werden beschränkt.
Der Vorgabewert für die ambiente Szenenbeleuchtung ist (0.2, 0.2, 0.2, 1.0).

GL_LIGHT_MODEL_LOCAL_VIEWER

params ist eine einzelne Ganz- oder Fließkommazahl welche bestimmt, wie der Reflexionswinkel für das Glanzlicht berechnet wird. Wenn params = 0 (bzw. 0.0) ist, wird dieser Winkel so bestimmt, dass die Reflexion parallel zur und Richtung der Z-Achse verläuft, unabhängig von der Position des Vertex in Betrachterkoordinaten. Andernfalls wird die Glanzlichtreflexion anhand des Koordinatenursprungs in Betrachterkoordinaten berechnet.
Der Vorgabewert ist 0.
(params wirkt sich wie eine Booleanvariable in C aus. 0 = false, alles andere = true.)

GL_LIGHT_MODEL_TWO_SIDE

params ist eine einzelne Ganz- oder Fließkommazahl welche bestimmt, ob die Lichtberechnung für Polygone nur einseitig oder beidseitig ist. Diese Einstellung wirkt sich nicht auf die Lichtberechnung für Punkte, Linien und Bitmaps aus.
Wenn params = 0 (bzw. 0.0) ist, wird die Lichtberechnung für Polygone einseitig durchgeführt. Das heißt, dass nur die Materialparameter der Vorderseiten in die Lichtberechnung einbezogen werden.
In jedem anderen Fall wird die zweiseitige Lichtberechnung aktiviert. In diesem Fall werden die Vetices der Rückseite mittels der Materialeigenschaften der Rückseiten beleuchtet. Außerdem werden die Normalen umgekehrt bevor die Lichtberechnung ausgeführt wird.
Vertices der Vorderseiten von Polygonen werden immer, mittels der Materialeigenschaften die für Vorderseiten definiert wurden, beleuchtet. Dabei werden keine Änderungen an den Normalen durchgeführt.
Der Vorgabewert ist 0.
(params wirkt sich wie eine Booleanvariable in C aus. 0 = false, alles andere = true.)
Hinweis : Zweiseitige Beleuchtung ist aufgrund des höheren Berechnungsaufwands für die GPU im Normalfall langsamer als nur einseitige Beleuchtung. Von daher sollte man dies nur nutzen wenn unbedingt benötigt.

GL_LIGHT_MODEL_COLOR_CONTROL

params ist ein einzelner Ganzzahl- oder Fließkommawert und muss als symbolische Konstante entweder GL_SINGLE_COLOR oder GL_SEPARATE_SPECULAR_COLOR lauten. Wenn params gleich GL_SEPARATE_SPECULAR_COLOR ist, wird der Glanzlichtanteil der Beleuchtung als separater Wert berechnet und nach der Texturierung (falls aktiv) zur Farbe hinzuaddiert. Die Fragmentfarbe ist dann die Farbe, die von der Beleuchtung generiert wurde, jedoch exklusiv des Glanzzlichtanteils.
Wenn params gleich GL_SINGLE_COLOR ist, erstellt die Beleuchtung einen einzelnen Farbwert, der als Fragmentfarbe genutzt wird und den Glanzzlichtanteil enthält. Es wird dann kein separater Farbwert mit dem Glanzlichtanteil erstellt und zur Texturfarbe addiert. Wenn die Bleuchtung ausgeschaltet ist, wird die aktuelle Farbe als Fragmentfarbe genutzt und es wird keine zusäztlicher Farbwert zur Texturfarbe addiert. Die Voreinstellung ist GL_SINGLE_COLOR.


Im RGBA-Modus, ist die beleuchtete Farbe eines Eckpunktes die Summe der Material-Emissions-Intensität, dem Produkt der ambienten Material-Reflektivität und dem ambienten Lichtanteil des Lichtmodells der Szene, sowie dem Betrag jeder aktivierten Lichtquelle. Jede Lichtquelle trägt zur Gesamtbeleuchtung drei Teile bei : Einen ambienten, einen diffusen und den Glanzzlichtanteil. Der ambiente Beitrag einer Lichtquelle ist das Produkt aus der ambienten Material-Reflektivität und der ambienten Intensität dieser Lichtquelle. Der diffuse Beitrag einer Lichtquelle ist das Produkt der diffusen Material-Reflektivität, der diffusen Intensität und dem Punktprodukt der Vertexnormale mit dem normalisierten Vektor zwischen Lichtquelle und Vertex. Der Glanzzlichtbeitrag einer Lichtquelle ist das Produkt der Glanzzlicht-Material-Reflektivität, der Glanzzlichtintensität und dem Punktprodukt zwischen den normalisierten Vertex-zu-Betrachter und Vertex-zum-Licht Vektoren, die dann mit der Leuchtkraft des Materials potenziert werden. Alle drei Beiträge der Lichtquelle vermindern sich entsprechend der Distanz zwischen Lichtquelle und Vertex, Lichtausrichtung, Spreizungsexponent und Spreizungs-Abfall-Winkel. Alle Punktprodukte werden mit 0 ersetzt, sollten sie zu einem negativen Wert führen.

Die Alpha komponente der resultierenden, beleuchteten Farbe wird dem Alpha-Wert der Diffusen Materialreflektion zugewiesen.

Im Farbindexmodus reicht der Wert des Beleuchtungsindex eines Vertex vom ambienten Wert bis zum Glanzlichtwert, der an glMaterial mittels GL_COLOR_INDEX übergeben wurde.
Diffuse und Glanzlichtkoeffizienten bestimmen um wieviel der resultierende Index größer ist als der ambiente. Die genannten Koeffizienten werden mit einer Gewichtung der Lichtfarben (30%, 59%, 11%), dem Glanz (Shininess) des Materials sowie den selben Reflektions- und Abschwächungsgleichungen wie im RGBA Fall berechnet.



Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn pname ein ungültiger Wert übergeben wird.
GL_INVALID_OPERATION wird generiert wenn glLightModel innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit Token GL_LIGHT_MODEL_AMBIENT
glGet mit Token GL_LIGHT_MODEL_LOCAL_VIEWER
glGet mit Token GL_LIGHT_MODEL_TWO_SIDE
glIsEnabled mit Token GL_LIGHTING



Siehe auch

glLight, glMaterial

Hintergrundwissen: Beleuchtung