glLightModel: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Version Hochgeladen)
(Siehe auch)
 
(10 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glLightModel =
 
= glLightModel =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''glLightModel''' - setzt Parameter für das Beleuchtungsmodel.
 
'''glLightModel''' - setzt Parameter für das Beleuchtungsmodel.
  
<br>
+
 
 +
 
 
== 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);
  
<br>
+
 
 +
 
 
== Parameter ==
 
== Parameter ==
 
<table border=1 rules=all>
 
<table border=1 rules=all>
Zeile 16: Zeile 19:
 
  <td>''pname''</td>
 
  <td>''pname''</td>
 
  <td>Spezifiziert einen Lichtparameter der nur einen Wert erwartet.<br>
 
  <td>Spezifiziert einen Lichtparameter der nur einen Wert erwartet.<br>
'''GL_LIGHT_MODEL_LOCAL_VIEWER''' und '''GL_LIGHT_MODEL_TWO_SIDE''' werden akzeptiert.</td>
+
'''GL_LIGHT_MODEL_LOCAL_VIEWER''', '''GL_LIGHT_MODEL_TWO_SIDE''' und '''GL_LIGHT_MODEL_COLOR_CONTROL''' werden akzeptiert.</td>
 
</tr>
 
</tr>
 
<tr>
 
<tr>
Zeile 24: Zeile 27:
 
</table>
 
</table>
  
<br>
+
 
 +
 
 
== 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);
  
<br>
+
 
 +
 
 
== Parameter ==
 
== Parameter ==
 
<table border=1 rules=all>
 
<table border=1 rules=all>
Zeile 35: Zeile 40:
 
  <td>''pname''</td>
 
  <td>''pname''</td>
 
  <td>Spezifiziert einen Lichtparameter. Akzeptiert werden: <br>
 
  <td>Spezifiziert einen Lichtparameter. Akzeptiert werden: <br>
'''GL_LIGHT_MODEL_AMBIENT, GL_LIGHT_MODEL_LOCAL_VIEWER,'''
+
'''GL_LIGHT_MODEL_AMBIENT, GL_LIGHT_MODEL_LOCAL_VIEWER''',' ''GL_LIGHT_MODEL_TWO_SIDE''' und '''GL_LIGHT_MODEL_COLOR_CONTROL'''.</td>
und '''GL_LIGHT_MODEL_TWO_SIDE'''</td>
 
 
</tr>
 
</tr>
 
<tr>
 
<tr>
Zeile 44: Zeile 48:
 
</table>
 
</table>
  
<br>
+
 
 +
 
 
== 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>
Es gibt 3 Beleuchtungsmodelle:
 
  
'''GL_LIGHT_MODEL_AMBIENT'''
+
===GL_LIGHT_MODEL_AMBIENT===
: ''params'' enthält vier Ganzahlen oder Fließkommawerte welche die ambiente RGBA Intensität der gesamten Szene spezifizieren.
+
: ''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.
+
: 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.
: Fließkommazahlen werden direkt übertragen.
 
: Weder Ganz- noch Fließkommazahlen sind beschränkt.
 
 
: Der '''Vorgabewert''' für die ambiente Szenenbeleuchtung ist (0.2, 0.2, 0.2, 1.0).
 
: Der '''Vorgabewert''' für die ambiente Szenenbeleuchtung ist (0.2, 0.2, 0.2, 1.0).
  
'''GL_LIGHT_MODEL_LOCAL_VIEWER'''
+
===GL_LIGHT_MODEL_LOCAL_VIEWER===
: ''params'' ist eine einzelne Ganz- oder Fließkommazahl welche bestimmt, wie der Reflexionswinkel für das Glanzlicht berechnet wird.
+
: ''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.
: Wenn ''params'' = 0 (bzw. 0.0) ist, wird dieser Winkel so bestimmt, dass die Reflexion parallel zur Blickrichtung und Richtung -Z-Achse verläuft. Dabei wird die Position des Vertex in Betrachterkoordinaten nicht beachtet.
 
: In jedem anderen Fall wird die Glanzlichtreflexion bezüglich den Koordinatenursprung in Betrachterkoordinaten berechnet.
 
 
: Der '''Vorgabewert'''  ist 0.
 
: Der '''Vorgabewert'''  ist 0.
 
: (''params'' wirkt sich wie eine Booleanvariable in C aus. 0 = false, alles andere = true.)
 
: (''params'' wirkt sich wie eine Booleanvariable in C aus. 0 = false, alles andere = true.)
  
'''GL_LIGHT_MODEL_TWO_SIDE'''
+
===GL_LIGHT_MODEL_TWO_SIDE===
: ''params'' ist eine einzelne Ganz- oder Fließkommazahl welche bestimmt, ob die Lichtberechnung für polygone nur einseitig oder zweiseitig ist.
+
: ''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.
: 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.
: 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 [[Eckpunkt|Vetices]] der Rückseite mittels der Materialeigenschaften der Rückseiten beleuchtet. Außerdem werden die [[Normalen]] umgekehrt bevor die Lichtberechnung ausgeführt wird.
: In jedem anderen Fall wird die zweiseitige Lichtberechnung aktiviert. In diesem Fall werden die [[Vertex|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.
: Vertices der Vorderseiten von Polygonen werden immer, mittels der Materialeigenschaften die für Vorderseiten definiert wurden, beleuchtet. Dabie werden keine Änderungen an den Normalen durchgeführt.
 
 
: Der '''Vorgabewert'''  ist 0.
 
: Der '''Vorgabewert'''  ist 0.
 
: (''params'' wirkt sich wie eine Booleanvariable in C aus. 0 = false, alles andere = true.)
 
: (''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'''.
 +
  
'''In RGBA mode, the lighted color of a vertex is the sum of the material emission intensity, the product of the material ambient reflectance and the lighting model full-scene  ambient intensity, and the contribution of each enabled light source. Each light source contributes the sum of three terms: ambient, diffuse, and specular. The ambient light source contribution is the product of the material ambient reflectance and the lights ambient intensity. The diffuse light source contribution is the product of the material diffuse reflectance, the lights diffuse intensity, and the dot product of the vertex's normal with the normalized vector from the vertex to the light source. The specular light source contribution is the product of the material specular reflectance, the lights specular intensity, and the dot product of the normalized vertex-to-eye and vertex-to-light vectors, raised to the power of the shininess of the material. All three light source contributions are attenuated equally based on the distance from the vertex to the light source and on light source direction, spread exponent, and spread cutoff angle. All dot products are replaced with zero if they evaluate to a negative value.'''
+
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.
 
Die Alpha komponente der resultierenden, beleuchteten Farbe wird dem Alpha-Wert der Diffusen Materialreflektion zugewiesen.
Zeile 80: Zeile 89:
  
  
<br>
+
 
 +
 
 +
 
 
== 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.
  
<br>
+
 
== 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>
 
[[glGet]] mit Token [[glGet#GL_LIGHT_MODEL_LOCAL_VIEWER|GL_LIGHT_MODEL_LOCAL_VIEWER]]<br>
 
[[glGet]] mit Token [[glGet#GL_LIGHT_MODEL_LOCAL_VIEWER|GL_LIGHT_MODEL_LOCAL_VIEWER]]<br>
Zeile 92: Zeile 104:
 
[[glIsEnabled]] mit Token '''GL_LIGHTING'''
 
[[glIsEnabled]] mit Token '''GL_LIGHTING'''
  
<br>
+
 
 +
 
  
 
== 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

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