Freigeben über


Lichteigenschaften (Direct3D 9)

Lichteigenschaften beschreiben den Typ und die Farbe einer Lichtquelle. Je nach Art des verwendeten Lichts kann ein Licht Eigenschaften für Dämpfung und Bereich oder für Spotlighteffekte aufweisen. 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 tragen. Dieser Abschnitt enthält Informationen für alle Lichteigenschaften. Die Informationen werden in die folgenden Gruppen unterteilt.

Die Positions-, Bereichs- und Dämpfungseigenschaften definieren die Position eines Lichts im Weltraum und wie sich das emittiert Licht über die Entfernung verhält. Wie bei allen Lichteigenschaften, die Sie in C++ verwenden, sind diese in der D3DLIGHT9 Struktur eines Lichts enthalten.

Leichte Dämpfung

Die Dämpfung steuert, wie die Intensität eines Lichts in Richtung des maximalen Abstands verringert wird, der durch die Bereichseigenschaft angegeben wird. Drei D3DLIGHT9 Strukturmber stellen eine leichte Dämpfung dar: Dämpfung0, Dämpfung1 und Dämpfung2. Diese Member enthalten Gleitkommawerte zwischen 0,0 und unendlich, wobei die Dämpfung eines Lichts gesteuert wird. Einige Anwendungen legen das Dämpfung1-Element 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 von der Lichtquelle zum Scheitelpunkt ist. Die maximale Lichtintensität liegt an der Quelle, die auf 1 / (Lichtbereich) im Bereich des Lichts sinkt. In der Regel legt eine Anwendung Dämpfung0 auf 0,0, Dämpfung1 auf einen Konstantenwert und Dämpfung2 auf 0,0 fest.

Sie können Dämpfungswerte kombinieren, um komplexere Dämpfungseffekte zu erzielen. 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 Spotlight Factor (Direct3D 9).

Helle Farbe

Lichter 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 durch das Direct3D-Beleuchtungsmodul integriert, das mit einem Gegenstück aus dem aktuellen Material interagiert, um eine endgültige Farbe zu erzeugen, die beim Rendern verwendet wird. Die diffuse Farbe interagiert mit der diffusen Reflektionseigenschaft des aktuellen Materials, der Glanzfarbe mit der Glanzreflektionseigenschaft 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 Elemente für diese Farben – Diffuse, Ambient und Specular – jede ist eine D3DCOLORVALUE Struktur, die die ausgegebene Farbe definiert.

Der Farbtyp, der am stärksten auf die Berechnungen des Systems angewendet wird, ist die diffuse Farbe. Die am häufigsten verwendete diffuse Farbe ist Weiß (R:1.0 G:1.0 B:1.0), Sie können jedoch nach Bedarf Farben erstellen, um gewünschte Effekte zu erzielen. Sie könnten beispielsweise rotes Licht für einen Kamin verwenden oder grünes Licht für ein Verkehrssignal verwenden, das auf "Los" festgelegt ist.

Im Allgemeinen legen Sie die Lichtfarbkomponenten auf Werte zwischen 0,0 und 1,0 (einschließlich) fest, dies ist jedoch keine Anforderung. So können Sie beispielsweise alle Komponenten auf 2,0 festlegen, wodurch ein Licht entsteht, das "heller als weiß" ist. Diese Einstellungsart kann besonders hilfreich sein, wenn Sie andere Dämpfungseinstellungen als Konstante 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-emissive, ambient, diffuse und glanzförmige Farben durch diffuse oder glanzförmige Vertexfarben überschrieben werden sollen. Dazu rufen Sie SetRenderState- auf, und legen Sie die in der folgenden Tabelle aufgeführten Gerätestatusvariablen fest.

Gerätestatusvariable Bedeutung Art Vorgabe
D3DRS_AMBIENTMATERIALSOURCE Definiert, wo die Umgebungsmaterialfarbe abgerufen werden soll. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Definiert, wo diffuse Materialfarbe abgerufen werden soll. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Definiert, wo Glanzmaterialfarbe 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 STIMMT

 

Der Alpha-/Transparenzwert stammt immer nur aus dem Alphakanal der diffusen Farbe.

Der Nebelwert stammt immer nur aus dem Alphakanal der Glanzfarbe.

D3DMATERIALCOLORSOURCE können die folgenden Werte aufweisen.

  • D3DMCS_MATERIAL - Materialfarbe wird als Quelle verwendet.
  • D3DMCS_COLOR1 – Diffuse Vertexfarbe wird als Quelle verwendet.
  • D3DMCS_COLOR2 – Glanzvertexfarbe wird als Quelle verwendet.

Lichtrichtung

Die Richtungseigenschaft eines Lichts bestimmt die Richtung, in der das vom Objekt ausgegebene Licht im Weltraum bewegt wird. Die Richtung wird nur von direktionalen Lichtern und Spotlights verwendet und mit einem Vektor beschrieben.

Legen Sie die Lichtrichtung im Element "Richtung" der D3DLIGHT9 Struktur des Lichts fest. Das Richtungselement ist vom Typ D3DVECTOR. Richtungsvektoren werden als Entfernungen von einem logischen Ursprung beschrieben, unabhängig von der Position des Lichts in einer Szene. Daher weist ein Blickpunkt, 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. Ebenso können Sie Sonnenlicht simulieren, das direkt auf einer Szene leuchtet, indem Sie ein direktionales Licht verwenden, dessen Richtung <0,-1,0>ist. Offensichtlich müssen Sie keine Lichter erstellen, die entlang der Koordinatenachsen leuchten; Sie können Werte kombinieren und abgleichen, um Lichter zu erstellen, die interessanter sind.

Anmerkung

Obwohl Sie den Richtungsvektor eines Lichts nicht normalisieren müssen, achten Sie immer darauf, dass es eine Größe aufweist. Verwenden Sie also keinen <0,0,0> Richtungsvektor.

 

Lichtposition

Die Lichtposition wird mithilfe einer D3DVECTOR Struktur im Position-Element der D3DLIGHT9 Struktur beschrieben. Die X-, Y- und Z-Koordinaten werden als Weltraum angenommen. Richtungsleuchten sind die einzige Art von Licht, die die Positionseigenschaft nicht verwenden.

Lichtbereich

Die Bereichseigenschaft eines Lichts bestimmt den Abstand im Weltraum, in dem Gitter in einer Szene kein Licht mehr empfangen, das von diesem Objekt ausgegeben wird. Das Bereichselement enthält einen Gleitkommawert, der den maximalen Bereich des Lichts im Weltbereich darstellt. Richtungsleuchten verwenden die Bereichseigenschaft nicht.

Licht und Materialien