glLight: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (Version Hochgeladen) |
K (Kategorisierung) |
||
(11 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glLight = | = glLight = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
− | '''glLightf, glLighti, glLightfv, glLightiv''' - | + | '''glLightf, glLighti, glLightfv, glLightiv''' - Setzen Eigenschaften der Lichtquellen. |
+ | |||
+ | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glLightf'''(''light'': TGLenum; ''pname'': TGLenum; ''param'': TGLfloat); | procedure '''glLightf'''(''light'': TGLenum; ''pname'': TGLenum; ''param'': TGLfloat); | ||
procedure '''glLighti'''(''light'': TGLenum; ''pname'': TGLenum; ''param'': TGLint); | procedure '''glLighti'''(''light'': TGLenum; ''pname'': TGLenum; ''param'': TGLint); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
− | + | {| table border=1 rules=all | |
− | + | ! '''light''' | |
− | + | | Spezifiziert die Lichtquelle. Die Anzahl der Lichtquellen ist implementationsabhängig. Es müssen aber mindestens 8 Lichter unterstützt werden. | |
− | + | Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten: | |
− | Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten: | + | * '''GL_LIGHT'''i wobei 0 <= i < '''GL_MAX_LIGHTS''' gilt. |
− | '''GL_LIGHT'''i wobei 0 <= i < '''GL_MAX_LIGHTS''' gilt. | + | |- |
− | + | ! '''pname''' | |
− | + | | Spezifiziert eine Lichtquelleneigenschaft, welche nur aus einem Einzelwert besteht. Akzeptiert werden: | |
− | + | * '''GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION''' und '''GL_QUADRATIC_ATTENUATION''' | |
− | + | |- | |
− | '''GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION''' und '''GL_QUADRATIC_ATTENUATION''' | + | ! ''param'' |
− | + | | Enthält den Wert, den die Eigenschaft ''pname'' der Lichtquelle ''light'' zugewiesen bekommen soll. | |
− | + | |} | |
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glLightfv'''(''light'': TGLenum; ''pname'': TGLenum; const ''params'': PGLfloat); | procedure '''glLightfv'''(''light'': TGLenum; ''pname'': TGLenum; const ''params'': PGLfloat); | ||
procedure '''glLightiv'''(''light'': TGLenum; ''pname'': TGLenum; const ''params'': PGLint); | procedure '''glLightiv'''(''light'': TGLenum; ''pname'': TGLenum; const ''params'': PGLint); | ||
− | + | ||
+ | |||
== Parameter == | == Parameter == | ||
− | + | {| table border=1 rules=all | |
− | + | ! '''light''' | |
− | + | | Spezifiziert die Lichtquelle. Die Anzahl der Lichtquellen ist implementationsabhängig. Es müssen aber mindestens 8 Lichter unterstützt werden. | |
− | + | Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten: | |
− | Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten: | + | * '''GL_LIGHT'''i wobei 0 <= i < '''GL_MAX_LIGHTS''' gilt. |
− | '''GL_LIGHT'''i wobei 0 <= i < '''GL_MAX_LIGHTS''' gilt. | + | |- |
− | + | ! '''pname''' | |
− | + | | Spezifiziert eine Lichtquelleneigenschaft. Akzeptiert werden: | |
− | + | * '''GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION''' und '''GL_QUADRATIC_ATTENUATION''' | |
− | + | |- | |
− | '''GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION, GL_SPOT_DIRECTION, GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION''' und '''GL_QUADRATIC_ATTENUATION''' | + | ! '''params''' |
− | + | | Ist ein Zeiger auf einen oder mehrere Werte, auf die die Eigenschaft ''pname'' der Lichtquelle ''light'' gesetzt werden soll. | |
− | + | |} | |
− | + | ||
− | + | ||
− | |||
− | |||
− | |||
== Beschreibung == | == Beschreibung == | ||
'''glLight''' setzt die verschiedenen Eigenschaften einer Lichtquelle.<br> | '''glLight''' setzt die verschiedenen Eigenschaften einer Lichtquelle.<br> | ||
Zeile 64: | Zeile 61: | ||
Der Parameter ''pname'' enthält den symbolischen Namen von einer der zehn möglichen Eigenschaften die eine Lichtquelle haben kann. | Der Parameter ''pname'' enthält den symbolischen Namen von einer der zehn möglichen Eigenschaften die eine Lichtquelle haben kann. | ||
− | Der Parameter ''params'' ist entweder ein einzelner Wert oder ein | + | Der Parameter ''params'' ist entweder ein einzelner Wert oder ein Zeiger auf ein Feld von Werten. Auf diese Werte wird die Eigenschaft gesetzt, die mit ''pname'' ausgewählt wurde. |
Die Lichtberechnung wird mittels [[glEnable]] bzw. [[glDisable]] und dem Token '''GL_LIGHTING''' aktiviert bzw. deaktiviert.<br> | Die Lichtberechnung wird mittels [[glEnable]] bzw. [[glDisable]] und dem Token '''GL_LIGHTING''' aktiviert bzw. deaktiviert.<br> | ||
Zeile 73: | Zeile 70: | ||
'''GL_AMBIENT''' | '''GL_AMBIENT''' | ||
− | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die ambiente RGBA | + | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die ambiente RGBA-Intensität der Lichtquelle repräsentieren. |
− | |||
− | Intensität der Lichtquelle repräsentieren. | ||
: Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | : Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | ||
: Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | : Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | ||
− | : Der Vorgabewert für '''GL_AMBIENT''' ist (0.0, 0.0, 0.0, 1.0). | + | : Der '''Vorgabewert''' für '''GL_AMBIENT''' ist '''(0.0, 0.0, 0.0, 1.0)'''. |
+ | :{{Hinweis|Ambientes Licht ist ein Richtungsloses Licht. Es Leuchtet aus allen Richtungen und stellt somit eine Grundbeleuchtung dar (deshalb nur kleine Werte einstellen). Ambientes Licht macht '''keinen''' räumlichen Eindruck. In der Natur kann man ambientes Licht eigentlich nicht finden. Am ehesten entspricht ambientes Licht den Lichtverhältnissen im Morgengrauen.}} | ||
'''GL_DIFFUSE''' | '''GL_DIFFUSE''' | ||
− | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die RGBA Intensität des diffusen Lichtanteils der Lichtquelle repräsentieren. | + | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die RGBA-Intensität des diffusen Lichtanteils der Lichtquelle repräsentieren. |
: Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | : Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | ||
: Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | : Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | ||
− | : Der Vorgabewert für '''GL_DIFFUSE''' ist (1.0, 1.0, 1.0, 1.0) für '''GL_LIGHT0''', für alle anderen Lichter (0.0, 0.0, 0.0, 1.0). | + | : Der '''Vorgabewert''' für '''GL_DIFFUSE''' ist '''(1.0, 1.0, 1.0, 1.0)''' für '''GL_LIGHT0''', für alle anderen Lichter '''(0.0, 0.0, 0.0, 1.0)'''. |
+ | :{{Hinweis|Diffuses Licht ist der Haupteil des Lichtes. Es bewirkt bereits einen räumlichen Eindruck und ist auch gerichtet. Diffuses Licht sorgt allerdings nicht für eine Oberflächenwirkung des Materials. Egal ob etwas hart oder weich ist, alles wird gleich beleuchtet.}} | ||
'''GL_SPECULAR''' | '''GL_SPECULAR''' | ||
− | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die RGBA Intensität des Glanzlichts der Lichtquelle repräsentieren. | + | : ''params'' enthält vier ganzzahlige oder Fließkommawerte welche die RGBA-Intensität des Glanzlichts der Lichtquelle repräsentieren. |
: Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | : Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden. <br> | ||
: Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | : Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt. | ||
− | : Der Vorgabewert für ''' | + | : Der '''Vorgabewert''' für '''GL_SPECULAR''' ist '''(1.0, 1.0, 1.0, 1.0)''' für '''GL_LIGHT0''', für alle anderen Lichter '''(0.0, 0.0, 0.0, 1.0)'''. |
+ | :{{Hinweis|Speculares Licht sorgt für die Glanzpunkte auf glatten Oberflächen (z.B.:Billardkugel). Erst das spekulare Licht läßt Rückschlüsse auf die Oberflächenbeschaffenheit zu. Vielfach wirken sehr glatte Oberflächen auch hart bzw. kalt.}} | ||
+ | |||
'''GL_POSITION''' | '''GL_POSITION''' | ||
− | : ''params'' enthält vier ganzzahlige oder Fließkommawerte | + | : ''params'' enthält vier ganzzahlige oder Fließkommawerte, die die Position der Lichtquelle in homogenen Objektkoordinaten repräsentieren. |
: Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt. | : Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt. | ||
− | : Die Position wird durch die | + | : Die Position wird durch die Modelansichtsmatrix (zum Zeitpunkt des Aufrufs von '''glLight''') transformiert, so als wäre '''glLight''' ein Punkt, und als Betrachterkoordinaten abgespeichert. |
− | : Wenn die w-Komponente 0.0 ist, wird die Lichtquelle als gerichtete Lichtquelle behandelt, wobei '''GL_POSITION''' die Richtung darstellt. In diesem Falle | + | : Wenn die w-Komponente 0.0 ist, wird die Lichtquelle als gerichtete Lichtquelle behandelt, wobei '''GL_POSITION''' die Richtung darstellt. In diesem Falle beziehen die Lichtberechnungen für das Glanzlicht und den diffusen Anteil die Richtung, nicht aber die aktuelle Position mit ein. Gleichzeitig ist die Lichtabschwächung (Attenuation) deaktiviert. |
: In allen anderen Fällen basiert die Berechnung des Glanzlichts und des diffusen Lichts auf der aktuellen Position. Die Abschwächung ist dabei aktiviert. | : In allen anderen Fällen basiert die Berechnung des Glanzlichts und des diffusen Lichts auf der aktuellen Position. Die Abschwächung ist dabei aktiviert. | ||
− | : Der Vorgabewert für die Position ist (0,0,1,0). Das heißt die Lichtquelle ist gerichtet, und | + | : Der '''Vorgabewert''' für die '''Position''' ist '''(0,0,1,0)'''. Das heißt, die Lichtquelle ist gerichtet, und leuchtet genau entlang der Z-Achse. |
+ | |||
'''GL_SPOT_DIRECTION''' | '''GL_SPOT_DIRECTION''' | ||
Zeile 107: | Zeile 107: | ||
: Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt. | : Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt. | ||
− | : Die Position wird durch die inverse der | + | : Die Position wird durch die inverse der Modelansichtsmatrix (zum Zeitpunkt des Aufrufs von '''glLight''') transformiert, so als wäre '''glLight''' eine [[Normalen|Normale]], und als Betrachterkoordinaten abgespeichert. |
− | : ''' | + | : '''GL_SPOT_DIRECTION''' wirkt sich nur aus, wenn '''GL_SPOT_CUTOFF''' nicht 180 ist, was die Vorgabe für die Streuung wäre. |
− | : Der Vorgabewert für die Richtung ist (0,0,-1). | + | : Der '''Vorgabewert''' für die '''Richtung''' ist '''(0,0,-1)'''. |
+ | |||
'''GL_SPOT_EXPONENT''' | '''GL_SPOT_EXPONENT''' | ||
Zeile 117: | Zeile 118: | ||
: Die effektive Lichtintensität ist abgeschwächt durch den Cosinus des Winkels zwischen dem Richtungsvektor des Lichts und dem Vektor zwischen Licht und zu beleuchtenden [[glVertex|Vertex]], hoch dem '''GL_SPOT_EXPONENT'''. | : Die effektive Lichtintensität ist abgeschwächt durch den Cosinus des Winkels zwischen dem Richtungsvektor des Lichts und dem Vektor zwischen Licht und zu beleuchtenden [[glVertex|Vertex]], hoch dem '''GL_SPOT_EXPONENT'''. | ||
: Das bedeutet, dass ein hoher Exponent eine fokusiertere Lichtquelle, undabhängig von Streuungswinkel (siehe nächster Abschnitt), beschreibt. | : Das bedeutet, dass ein hoher Exponent eine fokusiertere Lichtquelle, undabhängig von Streuungswinkel (siehe nächster Abschnitt), beschreibt. | ||
− | : Der Vorgabewert für den Exponent ist 0, mit der | + | : Der '''Vorgabewert''' für den '''Exponent''' ist '''0''', mit der Folge einer gleichmäßigen Ausleuchtung. |
Die Berechnung als Pseudocode: | Die Berechnung als Pseudocode: | ||
'''(''' cos( angle(GL_SPOT_DIREKTION, GL_POSITION-Vertex) ) ''')''' ^ GL_SPOT_EXPONENT | '''(''' cos( angle(GL_SPOT_DIREKTION, GL_POSITION-Vertex) ) ''')''' ^ GL_SPOT_EXPONENT | ||
+ | |||
'''GL_SPOT_CUTOFF''' | '''GL_SPOT_CUTOFF''' | ||
− | : ''params'' enthält einen ganzzahligen oder | + | : ''params'' enthält einen ganzzahligen oder Fließkommawert, welcher den maximalen Streuungswinkel der Lichtquelle repräsentiert. |
: Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Die Werte sind beschränkt auf das Intervall[0,90] und dem '''Spezialwert 180'''. Andere Werte lösen einen Fehler aus (siehe Fehlermeldungen) | : Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Die Werte sind beschränkt auf das Intervall[0,90] und dem '''Spezialwert 180'''. Andere Werte lösen einen Fehler aus (siehe Fehlermeldungen) | ||
: Wenn der Winkel zwischen dem Richtungsvektor des Lichts und dem Vektor vom Licht zum zu beleuchtenden [[Vertex]] größer ist als der Streuungswinkel, wirkt sich das Licht nicht auf den Vertex aus. Anderenfalls, wird die Intensität durch den Streuungswinkel und den verschiedenen Abschwächungsfaktoren (siehe nächster Abschnitt) bestimmt. | : Wenn der Winkel zwischen dem Richtungsvektor des Lichts und dem Vektor vom Licht zum zu beleuchtenden [[Vertex]] größer ist als der Streuungswinkel, wirkt sich das Licht nicht auf den Vertex aus. Anderenfalls, wird die Intensität durch den Streuungswinkel und den verschiedenen Abschwächungsfaktoren (siehe nächster Abschnitt) bestimmt. | ||
− | : Vorgabewert für den Streuungswinkel ist 180. Daraus resultiert eine gleichmäßige Lichtverteilung. | + | : '''Vorgabewert''' für den '''Streuungswinkel''' ist '''180'''. Daraus resultiert eine gleichmäßige Lichtverteilung. |
+ | |||
'''GL_CONSTANT_ATTENUATION''' & '''GL_LINEAR_ATTENUATION''' & '''GL_QUADRATIC_ATTENUATION''' | '''GL_CONSTANT_ATTENUATION''' & '''GL_LINEAR_ATTENUATION''' & '''GL_QUADRATIC_ATTENUATION''' | ||
− | : ''params'' enthält einen ganzzahligen oder | + | : ''params'' enthält einen ganzzahligen oder Fließkommawert, welcher einen der drei Abschwächungsfaktoren repäsentiert. |
: Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Es werden nur positive Werte akzeptiert. | : Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Es werden nur positive Werte akzeptiert. | ||
− | : Wenn die Lichtquelle ungerichtet ist, nimmt die Intensität der selbigen mit dem | + | : Wenn die Lichtquelle ungerichtet ist, nimmt die Intensität der selbigen mit dem Reziprok (1/x) der Summe von: |
: Konstanter Anteil + | : Konstanter Anteil + | ||
: Linearer Anteil * Entfernung zwischen Licht und zu beleuchtenden [[glVertex|Vertex]] + | : Linearer Anteil * Entfernung zwischen Licht und zu beleuchtenden [[glVertex|Vertex]] + | ||
: Quadratischer Anteil * Quadrat der Entfernung | : Quadratischer Anteil * Quadrat der Entfernung | ||
: ab. | : ab. | ||
− | : Die Vorgabewerte für die Abschwächungsfaktoren sind (1,0,0) mit der | + | : Die '''Vorgabewerte''' für die '''Abschwächungsfaktoren''' sind '''(1,0,0)''' mit der Folge, dass keine Abschwächung auftritt. |
+ | |||
+ | |||
+ | |||
− | |||
== Hinweise == | == Hinweise == | ||
− | Es gilt immer: | + | Es gilt immer: |
+ | :'''GL_LIGHT'''i = '''GL_LIGHT0''' + i | ||
+ | |||
+ | |||
+ | Wenn durch die Aktivierung des Lichtes ({{INLINE_CODE|glEnable(GL_LIGHTING)}}) ungewollt die Farben der beleuchteten Objekte verschwinden, wurde vergessen {{INLINE_CODE|[[glEnable#GL_COLOR_MATERIAL|glEnable(GL_COLOR_MATERIAL)]]}} aufzurufen. | ||
+ | |||
+ | |||
− | |||
− | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_ENUM''' wird generiert wenn entweder ''light'' oder ''pname'' ein ungültiger Wert übergeben wurde.<br> | '''GL_INVALID_ENUM''' wird generiert wenn entweder ''light'' oder ''pname'' ein ungültiger Wert übergeben wurde.<br> | ||
Zeile 153: | Zeile 162: | ||
'''GL_INVALID_OPERATION''' wird generiert wenn '''glLight''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks auftaucht. | '''GL_INVALID_OPERATION''' wird generiert wenn '''glLight''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks auftaucht. | ||
− | + | ||
+ | |||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
− | [[glGetLight]] | + | [[glGetLight]] |
− | [[glIsEnabled]] mit Token '''GL_LIGHTING''' | + | |
+ | [[glIsEnabled]] mit Token [[glIsEnabled#GL_LIGHTING|'''GL_LIGHTING''']] | ||
+ | |||
+ | |||
+ | == Links == | ||
+ | http://www.opengl.org/sdk/docs/man/xhtml/glLight.xml | ||
+ | |||
− | |||
== Siehe auch == | == Siehe auch == | ||
[[glColorMaterial]], [[glLightModel]], [[glMaterial]] | [[glColorMaterial]], [[glLightModel]], [[glMaterial]] | ||
+ | |||
+ | Hintergrundwissen: [[Beleuchtung]] | ||
[[Kategorie:GL|Light]] | [[Kategorie:GL|Light]] | ||
+ | [[Kategorie:GL1.0|Light]] |
Aktuelle Version vom 22. Juni 2011, 03:54 Uhr
Inhaltsverzeichnis
glLight
Name
glLightf, glLighti, glLightfv, glLightiv - Setzen Eigenschaften der Lichtquellen.
Delphi-Spezifikation
procedure glLightf(light: TGLenum; pname: TGLenum; param: TGLfloat); procedure glLighti(light: TGLenum; pname: TGLenum; param: TGLint);
Parameter
light | Spezifiziert die Lichtquelle. Die Anzahl der Lichtquellen ist implementationsabhängig. Es müssen aber mindestens 8 Lichter unterstützt werden.
Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten:
|
---|---|
pname | Spezifiziert eine Lichtquelleneigenschaft, welche nur aus einem Einzelwert besteht. Akzeptiert werden:
|
param | Enthält den Wert, den die Eigenschaft pname der Lichtquelle light zugewiesen bekommen soll. |
Delphi-Spezifikation
procedure glLightfv(light: TGLenum; pname: TGLenum; const params: PGLfloat); procedure glLightiv(light: TGLenum; pname: TGLenum; const params: PGLint);
Parameter
light | Spezifiziert die Lichtquelle. Die Anzahl der Lichtquellen ist implementationsabhängig. Es müssen aber mindestens 8 Lichter unterstützt werden.
Die Lichtquellen werden durch symbolische Namen ausgewiesen. Diese Namen lauten:
|
---|---|
pname | Spezifiziert eine Lichtquelleneigenschaft. Akzeptiert werden:
|
params | Ist ein Zeiger auf einen oder mehrere Werte, auf die die Eigenschaft pname der Lichtquelle light gesetzt werden soll. |
Beschreibung
glLight setzt die verschiedenen Eigenschaften einer Lichtquelle.
Die Lichtquelle wird über den Parameter light bestimmt und ist ein symbolischer Name der Form:
GL_LIGHTi wobei 0 <= i < GL_MAX_LIGHTS ist.
Der Parameter pname enthält den symbolischen Namen von einer der zehn möglichen Eigenschaften die eine Lichtquelle haben kann.
Der Parameter params ist entweder ein einzelner Wert oder ein Zeiger auf ein Feld von Werten. Auf diese Werte wird die Eigenschaft gesetzt, die mit pname ausgewählt wurde.
Die Lichtberechnung wird mittels glEnable bzw. glDisable und dem Token GL_LIGHTING aktiviert bzw. deaktiviert.
Wenn die Beleuchtung aktiviert ist, werden alle aktivierten Lichtquellen in die Lichtberechnung einbezogen.
Die Lichtquelle i wird aktiviert bzw. deaktiviert mit glEnable/glDisable und dem Token GL_LIGHTi.
Parameter für pname
GL_AMBIENT
- params enthält vier ganzzahlige oder Fließkommawerte welche die ambiente RGBA-Intensität der Lichtquelle repräsentieren.
- Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden.
- Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt.
- Der Vorgabewert für GL_AMBIENT ist (0.0, 0.0, 0.0, 1.0).
GL_DIFFUSE
- params enthält vier ganzzahlige oder Fließkommawerte welche die RGBA-Intensität des diffusen Lichtanteils der Lichtquelle repräsentieren.
- Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden.
- Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt.
- Der Vorgabewert für GL_DIFFUSE ist (1.0, 1.0, 1.0, 1.0) für GL_LIGHT0, für alle anderen Lichter (0.0, 0.0, 0.0, 1.0).
GL_SPECULAR
- params enthält vier ganzzahlige oder Fließkommawerte welche die RGBA-Intensität des Glanzlichts der Lichtquelle repräsentieren.
- Ganzahlige Werte werden linear auf das Intervall[-1.0,1.0] übertragen. Dies geschieht so, dass der größtmögliche Wert der Ganzzahl auf 1.0 und der kleinstmögliche auf -1.0 übertragen werden.
- Weder Ganze- noch Fließkommazahlen werden auf das Intervall beschränkt.
- Der Vorgabewert für GL_SPECULAR ist (1.0, 1.0, 1.0, 1.0) für GL_LIGHT0, für alle anderen Lichter (0.0, 0.0, 0.0, 1.0).
GL_POSITION
- params enthält vier ganzzahlige oder Fließkommawerte, die die Position der Lichtquelle in homogenen Objektkoordinaten repräsentieren.
- Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt.
- Die Position wird durch die Modelansichtsmatrix (zum Zeitpunkt des Aufrufs von glLight) transformiert, so als wäre glLight ein Punkt, und als Betrachterkoordinaten abgespeichert.
- Wenn die w-Komponente 0.0 ist, wird die Lichtquelle als gerichtete Lichtquelle behandelt, wobei GL_POSITION die Richtung darstellt. In diesem Falle beziehen die Lichtberechnungen für das Glanzlicht und den diffusen Anteil die Richtung, nicht aber die aktuelle Position mit ein. Gleichzeitig ist die Lichtabschwächung (Attenuation) deaktiviert.
- In allen anderen Fällen basiert die Berechnung des Glanzlichts und des diffusen Lichts auf der aktuellen Position. Die Abschwächung ist dabei aktiviert.
- Der Vorgabewert für die Position ist (0,0,1,0). Das heißt, die Lichtquelle ist gerichtet, und leuchtet genau entlang der Z-Achse.
GL_SPOT_DIRECTION
- params enthält drei ganzzahlige oder Fließkommawerte welche die Richtung der Lichtquelle in homogenen Objektkoordinaten repräsentieren.
- Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen und sind nicht beschränkt.
- Die Position wird durch die inverse der Modelansichtsmatrix (zum Zeitpunkt des Aufrufs von glLight) transformiert, so als wäre glLight eine Normale, und als Betrachterkoordinaten abgespeichert.
- GL_SPOT_DIRECTION wirkt sich nur aus, wenn GL_SPOT_CUTOFF nicht 180 ist, was die Vorgabe für die Streuung wäre.
- Der Vorgabewert für die Richtung ist (0,0,-1).
GL_SPOT_EXPONENT
- params enthält einen ganzzahligen oder Fließkommawerte welcher die Intensitätsverteilung der Lichtquelle repräsentiert.
- Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Die Werte sind beschränkt auf das Intervall[0,128]. Andere Werte lösen einen Fehler aus (siehe Fehlermeldungen)
- Die effektive Lichtintensität ist abgeschwächt durch den Cosinus des Winkels zwischen dem Richtungsvektor des Lichts und dem Vektor zwischen Licht und zu beleuchtenden Vertex, hoch dem GL_SPOT_EXPONENT.
- Das bedeutet, dass ein hoher Exponent eine fokusiertere Lichtquelle, undabhängig von Streuungswinkel (siehe nächster Abschnitt), beschreibt.
- Der Vorgabewert für den Exponent ist 0, mit der Folge einer gleichmäßigen Ausleuchtung.
Die Berechnung als Pseudocode:
( cos( angle(GL_SPOT_DIREKTION, GL_POSITION-Vertex) ) ) ^ GL_SPOT_EXPONENT
GL_SPOT_CUTOFF
- params enthält einen ganzzahligen oder Fließkommawert, welcher den maximalen Streuungswinkel der Lichtquelle repräsentiert.
- Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Die Werte sind beschränkt auf das Intervall[0,90] und dem Spezialwert 180. Andere Werte lösen einen Fehler aus (siehe Fehlermeldungen)
- Wenn der Winkel zwischen dem Richtungsvektor des Lichts und dem Vektor vom Licht zum zu beleuchtenden Vertex größer ist als der Streuungswinkel, wirkt sich das Licht nicht auf den Vertex aus. Anderenfalls, wird die Intensität durch den Streuungswinkel und den verschiedenen Abschwächungsfaktoren (siehe nächster Abschnitt) bestimmt.
- Vorgabewert für den Streuungswinkel ist 180. Daraus resultiert eine gleichmäßige Lichtverteilung.
GL_CONSTANT_ATTENUATION & GL_LINEAR_ATTENUATION & GL_QUADRATIC_ATTENUATION
- params enthält einen ganzzahligen oder Fließkommawert, welcher einen der drei Abschwächungsfaktoren repäsentiert.
- Ganzzahlige Werte und Fließkommazahlen werden direkt übertragen. Es werden nur positive Werte akzeptiert.
- Wenn die Lichtquelle ungerichtet ist, nimmt die Intensität der selbigen mit dem Reziprok (1/x) der Summe von:
- Konstanter Anteil +
- Linearer Anteil * Entfernung zwischen Licht und zu beleuchtenden Vertex +
- Quadratischer Anteil * Quadrat der Entfernung
- ab.
- Die Vorgabewerte für die Abschwächungsfaktoren sind (1,0,0) mit der Folge, dass keine Abschwächung auftritt.
Hinweise
Es gilt immer:
- GL_LIGHTi = GL_LIGHT0 + i
Wenn durch die Aktivierung des Lichtes (glEnable(GL_LIGHTING)) ungewollt die Farben der beleuchteten Objekte verschwinden, wurde vergessen glEnable(GL_COLOR_MATERIAL) aufzurufen.
Fehlermeldungen
GL_INVALID_ENUM wird generiert wenn entweder light oder pname ein ungültiger Wert übergeben wurde.
GL_INVALID_VALUE wird generiert wenn der Eigenschaft GL_SPOT_EXPONENT ein Wert außerhalb des Intervalls[0,128] zugewiesen wurde. Außerdem noch wenn einer der Abschwächungsfaktoren (Attenuation) negativ ist und wenn der Eigenschaft GL_SPOT_CUTOFF ein Wert außerhalb des Intervalls[0,90] (ausgenommen dem Spezialwert 180) zugewiesen wurde.
GL_INVALID_OPERATION wird generiert wenn glLight innerhalb eines glBegin-glEnd Blocks auftaucht.
Zugehörige Wertrückgaben
glIsEnabled mit Token GL_LIGHTING
Links
http://www.opengl.org/sdk/docs/man/xhtml/glLight.xml
Siehe auch
glColorMaterial, glLightModel, glMaterial
Hintergrundwissen: Beleuchtung