Lichteigenschaften (Direct3D 9)
Lichteigenschaften beschreiben den Typ und die Farbe einer Lichtquelle. Abhängig von der Art des verwendeten Lichts kann eine Leuchte Eigenschaften für Dämpfung und Bereich oder für Spotlight-Effekte haben. Aber nicht alle Arten von Lichtern verwenden alle Eigenschaften. Direct3D verwendet die D3DLIGHT9-Struktur , um Informationen über Lichteigenschaften für alle Arten von Lichtquellen zu übertragen. Dieser Abschnitt enthält Informationen zu allen Lichteigenschaften. Die Informationen werden in die folgenden Gruppen unterteilt.
Die Positions-, Bereichs- und Dämpfungseigenschaften definieren die Position eines Lichts im Weltraum und das Verhalten des lichtstrahlten Lichts über die Entfernung. Wie alle Lichteigenschaften, die Sie in C++ verwenden, sind diese in der D3DLIGHT9-Struktur eines Lichts enthalten.
Lichtdämpfung
Die Dämpfung steuert, wie die Intensität eines Lichts in Richtung des maximalen Abstands abnimmt, der von der range-Eigenschaft angegeben wird. Drei D3DLIGHT9-Strukturmember stellen die Lichtdämpfung dar: Attenuation0, Attenuation1 und Attenuation2. Diese Member enthalten Gleitkommawerte von 0,0 bis unendlich und steuern die Dämpfung eines Lichts. Einige Anwendungen legen den Attenuation1-Member auf 1,0 und die anderen auf 0,0 fest, was zu einer Lichtintensität führt, die sich als 1 /D ändert, wobei D der Abstand zwischen der Lichtquelle und dem Scheitelpunkt ist. Die maximale Lichtintensität liegt an der Quelle und verringert sich auf 1 / (Lichtbereich) im Bereich des Lichts. In der Regel legt eine Anwendung Attenuation0 auf 0,0, Attenuation1 auf einen konstanten Wert und Attenuation2 auf 0,0 fest.
Sie können Dämpfungswerte kombinieren, um komplexere Dämpfungseffekte zu erhalten. Oder Sie können sie auf Werte außerhalb des normalen Bereichs festlegen, um noch fremde Dämpfungseffekte zu erzeugen. Negative Dämpfungswerte sind jedoch nicht zulässig. Siehe Dämpfung und Blickpunktfaktor (Direct3D 9).
Helle Farbe
Leuchten in Direct3D geben drei Farben aus, die unabhängig in den Beleuchtungsberechnungen des Systems verwendet werden: eine diffuse Farbe, eine Umgebungsfarbe und eine Glanzfarbe. Jedes wird vom Direct3D-Beleuchtungsmodul integriert und interagiert mit einer Entsprechung aus dem aktuellen Material, um eine endgültige Farbe zu erzeugen, die beim Rendering verwendet wird. Die diffuse Farbe interagiert mit der diffusen Reflektionseigenschaft des aktuellen Materials, der Glanzfarbe mit der Spiegelungseigenschaft des Materials usw. Einzelheiten dazu, wie Direct3D diese Farben anwendet, finden Sie unter Mathematik der Beleuchtung (Direct3D 9).
In einer C++-Anwendung enthält die D3DLIGHT9-Struktur drei Member für diese Farben – Diffuse, Ambient und Specular – jedes ist eine D3DCOLORVALUE-Struktur , die die ausgegebene Farbe definiert.
Die Art der Farbe, die am stärksten auf die Berechnungen des Systems angewendet wird, ist die diffuse Farbe. Die gebräuchlichste diffuse Farbe ist Weiß (R:1.0 G:1.0 B:1.0), aber Sie können Farben nach Bedarf erstellen, um die gewünschten Effekte zu erzielen. Sie können beispielsweise rotes Licht für einen Kamin oder grünes Licht für eine Ampel verwenden, die auf "Go" festgelegt ist.
Im Allgemeinen legen Sie die Lichtfarbenkomponenten auf Werte zwischen 0,0 und 1,0 (einschließlich) fest, aber dies ist keine Anforderung. Beispielsweise können Sie alle Komponenten auf 2.0 festlegen und so ein Licht erzeugen, das "heller als weiß" ist. Diese Art von Einstellung kann besonders nützlich sein, wenn Sie andere Dämpfungseinstellungen als konstant verwenden.
Beachten Sie, dass die Alphafarbkomponente nicht verwendet wird, obwohl Direct3D RGBA-Werte für Lichter verwendet.
In der Regel werden Materialfarben für die Beleuchtung verwendet. Sie können jedoch angeben, dass Materialfarben – emissiv, ambient, diffus und specular – von diffusen oder glanzförmigen Vertexfarben überschrieben werden sollen. Dazu rufen Sie SetRenderState auf und legen die in der folgenden Tabelle aufgeführten Gerätestatusvariablen fest.
Gerätezustandsvariable | Bedeutung | type | Standard |
---|---|---|---|
D3DRS_AMBIENTMATERIALSOURCE | Definiert, wo die Farbe des Umgebungsmaterials abgerufen werden soll. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_DIFFUSEMATERIALSOURCE | Definiert, wo diffuse Materialfarben abgerufen werden sollen. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR1 |
D3DRS_SPECULARMATERIALSOURCE | Definiert, wo die Farbe des Glanzmaterials abgerufen werden soll. | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR2 |
D3DRS_EMISSIVEMATERIALSOURCE | Definiert, wo emissive Materialfarbe abgerufen werden soll. | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_COLORVERTEX | Deaktiviert oder aktiviert die Verwendung von Vertexfarben. | BOOL | TRUE |
Der Alpha-/Transparenzwert stammt immer nur aus dem Alphakanal der diffusen Farbe.
Der Nebelwert stammt immer nur aus dem Alphakanal der Glanzfarbe.
D3DMATERIALCOLORSOURCE kann die folgenden Werte aufweisen.
- D3DMCS_MATERIAL: Materialfarbe wird als Quelle verwendet.
- D3DMCS_COLOR1: Die diffuse Vertexfarbe wird als Quelle verwendet.
- D3DMCS_COLOR2: Als Quelle wird die Scheitelpunktfarbe verwendet.
Lichtrichtung
Die Richtungseigenschaft eines Lichts bestimmt die Richtung, in der sich das vom Objekt emittierte Licht im Weltraum bewegt. Die Richtung wird nur von direktionalen Lichtern und Scheinwerfern verwendet und mit einem Vektor beschrieben.
Legen Sie die Lichtrichtung im Direction-Element der D3DLIGHT9-Struktur des Lichts fest. Richtungsmember ist vom Typ D3DVECTOR. Richtungsvektoren werden als Entfernungen von einem logischen Ursprung beschrieben, unabhängig von der Position des Lichts in einer Szene. Daher hat ein Spotlight, der direkt auf eine Szene zeigt - entlang der positiven Z-Achse - einen Richtungsvektor von <0,0,1> , unabhängig davon, wo seine Position definiert ist. Auf ähnliche Weise können Sie das Sonnenlicht direkt auf einer Szene simulieren, indem Sie ein direktionales Licht verwenden, dessen Richtung 0,-1,0> ist<. Natürlich müssen Sie keine Lichter erzeugen, die entlang der Koordinatenachsen leuchten; Sie können Werte mischen und abgleichen, um Lichter zu erzeugen, die in interessanteren Winkeln leuchten.
Hinweis
Obwohl Sie den Richtungsvektor eines Lichts nicht normalisieren müssen, sollten Sie immer sicherstellen, dass es eine Größe aufweist. Anders ausgedrückt: Verwenden Sie <keinen 0,0,0-Richtungsvektor> .
Lichtposition
Die Lichtposition wird mithilfe einer D3DVECTOR-Struktur im Position-Element der D3DLIGHT9-Struktur beschrieben. Es wird angenommen, dass sich die x-, y- und z-Koordinaten im Weltraum befinden. Richtlichter sind die einzige Art von Licht, die die Position-Eigenschaft nicht verwenden.
Lichtbereich
Die Range-Eigenschaft eines Lichts bestimmt den Abstand im Weltraum, in dem Gitter in einer Szene kein Licht mehr empfangen, das von diesem Objekt emittiert wird. Das Range-Element enthält einen Gleitkommawert, der den maximalen Bereich des Lichts im Weltraum darstellt. Richtungsleuchten verwenden nicht die Range-Eigenschaft.
Zugehörige Themen