glLightModel: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) K (→GL_LIGHT_MODEL_TWO_SIDE) |
Flash (Diskussion | Beiträge) (→Siehe auch) |
||
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glLightModel = | = glLightModel = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
'''glLightModel''' - setzt Parameter für das Beleuchtungsmodel. | '''glLightModel''' - setzt Parameter für das Beleuchtungsmodel. | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glLightModelf'''(''pname'': TGLenum; ''param'': TGLfloat); | procedure '''glLightModelf'''(''pname'': TGLenum; ''param'': TGLfloat); | ||
procedure '''glLightModeli'''(''pname'': TGLenum; ''param'': TGLint); | procedure '''glLightModeli'''(''pname'': TGLenum; ''param'': TGLint); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
<table border=1 rules=all> | <table border=1 rules=all> | ||
Zeile 24: | Zeile 27: | ||
</table> | </table> | ||
− | + | ||
+ | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glLightModelfv'''(''pname'': TGLenum; const ''params'': PGLfloat); | procedure '''glLightModelfv'''(''pname'': TGLenum; const ''params'': PGLfloat); | ||
procedure ''' glLightModeliv'''(''pname'': TGLenum; const ''params'': PGLint); | procedure ''' glLightModeliv'''(''pname'': TGLenum; const ''params'': PGLint); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
<table border=1 rules=all> | <table border=1 rules=all> | ||
Zeile 43: | Zeile 48: | ||
</table> | </table> | ||
− | + | ||
+ | |||
== Beschreibung == | == 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.<br> | '''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.<br> | ||
Zeile 67: | Zeile 73: | ||
===GL_LIGHT_MODEL_COLOR_CONTROL=== | ===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, | + | : ''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, | + | : 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'''. |
Zeile 75: | Zeile 81: | ||
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 ''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. | 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 | + | 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. | Die Alpha komponente der resultierenden, beleuchteten Farbe wird dem Alpha-Wert der Diffusen Materialreflektion zugewiesen. | ||
Zeile 83: | Zeile 89: | ||
− | + | ||
+ | |||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_ENUM''' wird generiert wenn ''pname'' ein ungültiger Wert übergeben wird.<br> | '''GL_INVALID_ENUM''' wird generiert wenn ''pname'' ein ungültiger Wert übergeben wird.<br> | ||
'''GL_INVALID_OPERATION''' wird generiert wenn '''glLightModel''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | '''GL_INVALID_OPERATION''' wird generiert wenn '''glLightModel''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird. | ||
− | + | ||
+ | |||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
[[glGet]] mit Token [[glGet#GL_LIGHT_MODEL_AMBIENT|GL_LIGHT_MODEL_AMBIENT]]<br> | [[glGet]] mit Token [[glGet#GL_LIGHT_MODEL_AMBIENT|GL_LIGHT_MODEL_AMBIENT]]<br> | ||
Zeile 95: | Zeile 104: | ||
[[glIsEnabled]] mit Token '''GL_LIGHTING''' | [[glIsEnabled]] mit Token '''GL_LIGHTING''' | ||
− | + | ||
+ | |||
== Siehe auch == | == Siehe auch == | ||
[[glLight]], [[glMaterial]] | [[glLight]], [[glMaterial]] | ||
+ | |||
+ | Hintergrundwissen: [[Beleuchtung]] | ||
[[Kategorie:GL|LightModel]] | [[Kategorie:GL|LightModel]] | ||
+ | [[Kategorie:GL1.0]] |
Aktuelle Version vom 16. April 2007, 00:24 Uhr
Inhaltsverzeichnis
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
Hintergrundwissen: Beleuchtung