Freigeben über


Leuchten und Materialien (Direct3D 9)

Lichter werden verwendet, um Objekte in einer Szene zu beleuchten. Wenn die Beleuchtung aktiviert ist, berechnet Direct3D die Farbe der einzelnen Objektvertex basierend auf einer Kombination von:

Anmerkung

Dieser Abschnitt ist nur für die Pipeline mit fester Funktion vorgesehen. Programmierbare Shader führen alle Beleuchtung explizit aus.

 

  • Die aktuelle Materialfarbe und die Texel in einer zugeordneten Texturzuordnung.
  • Die diffusen und glanzförmigen Farben am Scheitelpunkt, sofern angegeben.
  • Die Farbe und Intensität des Lichts, das von Lichtquellen in der Szene oder dem Umgebungslichtfaktor der Szene erzeugt wird.

Wenn Sie Direct3D-Beleuchtung und -Materialien verwenden, können Sie Direct3D die Details der Beleuchtung für Sie verarbeiten. Fortgeschrittene Benutzer können bei Bedarf die Beleuchtung selbst durchführen.

Wie Sie mit Beleuchtung und Materialien arbeiten, macht einen großen Unterschied bei der Darstellung der gerenderten Szene. Materialien definieren, wie Licht von einer Oberfläche reflektiert wird. Direktes Licht und Umgebungslicht definieren das reflektierte Licht. Sie müssen Materialien verwenden, um eine Szene zu rendern, wenn die Beleuchtung aktiviert ist. Licht ist nicht erforderlich, um eine Szene zu rendern, aber Details in einer Szene, die ohne Licht gerendert wird, sind nicht sichtbar. Das Rendern einer nicht beleuchteten Szene führt am besten zu einer Silhouette der Objekte in der Szene. Dies reicht für die meisten Zwecke nicht aus.

Direktes Licht im Vergleich zum Umgebungslicht

Obwohl sowohl direktes als auch Umgebungslicht Objekte in einer Szene beleuchtet, sind sie unabhängig voneinander, sie haben sehr unterschiedliche Effekte, und sie erfordern, dass Sie mit ihnen auf völlig unterschiedliche Weise arbeiten.

Direktes Licht ist nur das: direkt. Direktes Licht hat immer Richtung und Farbe, und es ist ein Faktor für Schattierungsalgorithmen, z. B. Gouraud-Schattierung. Verschiedene Arten von Licht geben direktes Licht auf unterschiedliche Weise aus, wodurch spezielle Dämpfungseffekte entstehen. Sie erstellen eine Reihe von Lichtparametern für direktes Licht, indem Sie die IDirect3DDevice9::SetLight-Methode aufrufen.

Umgebungslicht ist praktisch überall in einer Szene. Sie können sich dies als eine allgemeine Lichtebene vorstellen, die eine ganze Szene füllt, unabhängig von den Objekten und deren Positionen in dieser Szene. Umgebungslicht hat keine Position oder Richtung, nur Farbe und Intensität. Jedes Licht fügt das gesamte Umgebungslicht in einer Szene hinzu. Legen Sie die Umgebungslichtebene mit einem Aufruf der IDirect3DDevice9::SetRenderState Methode fest, wobei D3DRS_AMBIENT als parameter State und die gewünschte RGBA-Farbe als Wertparameter angegeben wird.

Umgebungslichtfarbe hat die Form eines RGBA-Werts, wobei jede Komponente ein ganzzahliger Wert von 0 bis 255 ist. Dies ist im Gegensatz zu den meisten Farbwerten in Direct3D.

Sie können das makro D3DCOLOR_RGBA verwenden, um RGBA-Werte zu generieren. Die roten, grünen und blauen Komponenten kombinieren die endgültige Farbe des Umgebungslichts. Die Alphakomponente steuert die Transparenz der Farbe. Bei Verwendung der Hardwarebeschleunigung oder RGB-Emulation wird die Alphakomponente ignoriert.

Direct3D Light Model vs. Nature

In der Natur, wenn Licht aus einer Quelle ausgegeben wird, wird es von Hunderten reflektiert, wenn nicht Tausende oder Millionen von Objekten, bevor das Auge des Benutzers erreicht wird. Jedes Mal, wenn es reflektiert wird, wird etwas Licht von einer Oberfläche absorbiert, einige werden in zufällige Richtungen verstreut, und der Rest geht auf eine andere Oberfläche oder auf das Auge des Benutzers. Dieser Prozess wird fortgesetzt, bis das Licht auf nichts reduziert wird oder ein Benutzer das Licht wahrnimmt.

Offensichtlich sind die Berechnungen, die erforderlich sind, um das natürliche Verhalten des Lichts perfekt zu simulieren, zu zeitaufwändig, um Direct3D-Grafiken in Echtzeit zu verwenden. Daher nähert sich das Direct3D-Lichtmodell der Art und Weise, wie licht in der natürlichen Welt funktioniert. Direct3D beschreibt Licht in Bezug auf rote, grüne und blaue Komponenten, die kombiniert werden, um eine endgültige Farbe zu erstellen.

Wenn das Licht in Direct3D von einer Oberfläche reflektiert wird, interagiert die Lichtfarbe mathematisch mit der Oberfläche selbst, um die farbe zu erstellen, die schließlich auf dem Bildschirm angezeigt wird. Spezifische Informationen zu den Von Direct3D-Algorithmen verwendeten Algorithmen finden Sie unter Mathematik der Beleuchtung (Direct3D 9).

Das Direct3D-Lichtmodell generalisiert Licht in zwei Arten: Umgebungslicht und direktes Licht. Jede hat unterschiedliche Attribute und interagiert jeweils auf unterschiedliche Weise mit dem Material einer Oberfläche. Umgebungslicht ist Licht, das so weit gestreut wurde, dass seine Richtung und Quelle unbestimmt sind: es behält überall einen niedrigen Grad an Intensität. Die indirekte Beleuchtung, die von Fotografen verwendet wird, ist ein gutes Beispiel für Umgebungslicht. Umgebungslicht in Direct3D, wie in der Natur, hat keine echte Richtung oder Quelle, nur eine Farbe und Intensität. Tatsächlich ist der Umgebungslichtpegel völlig unabhängig von Objekten in einer Szene, die Licht erzeugen. Umgebungslicht trägt nicht zur Spiegelung bei.

Direktes Licht ist das Licht, das von einer Quelle innerhalb einer Szene erzeugt wird; es hat immer Farbe und Intensität, und er bewegt sich in eine bestimmte Richtung. Direktes Licht interagiert mit dem Material einer Oberfläche, um Glanzlichter zu erzeugen, und seine Richtung wird als Faktor bei Schattierungsalgorithmen verwendet, einschließlich der Gouraud-Schattierung. Wenn direktes Licht reflektiert wird, trägt es nicht zum Umgebungslichtniveau in einer Szene bei. Die Quellen in einer Szene, die direktes Licht erzeugen, weisen unterschiedliche Merkmale auf, die sich darauf auswirken, wie sie eine Szene beleuchtet.

Darüber hinaus hat das Material eines Polygons Eigenschaften, die beeinflussen, wie dieses Polygon das empfangene Licht widerspiegelt. Sie legen ein einzelnes Reflektionsmerkmal fest, das beschreibt, wie das Material Umgebungslicht widerspiegelt, und Sie legen einzelne Eigenschaften fest, um die Glanz- und diffuse Reflektion des Materials zu bestimmen. Weitere Informationen finden Sie unter Materials (Direct3D 9).

Farbwerte für Lichter und Materialien

Direct3D beschreibt Die Farbe in Bezug auf vier Komponenten–Rot, Grün, Blau und Alpha, die kombiniert werden, um eine endgültige Farbe zu erzielen. Die D3DCOLORVALUE C++-Struktur ist so definiert, dass sie Werte für jede Komponente enthält. Jedes Element ist ein Gleitkommawert, der in der Regel von 0,0 bis einschließlich 1,0 liegt. Obwohl sowohl Leuchten als auch Materialien dieselbe Struktur zur Beschreibung der Farbe verwenden, werden die Werte in der Struktur jeweils etwas anders verwendet.

Farbwerte für Lichtquellen stellen die Menge einer bestimmten Lichtkomponente dar, die sie emittiert. Da Lichter keine Alphakomponente verwenden, sind nur die roten, grünen und blauen Komponenten der Farbe relevant. Sie können die drei Komponenten als rote, grüne und blaue Linsen auf einem Projektionsfernseher visualisieren. Jedes Objektiv ist möglicherweise deaktiviert (ein Wert von 0,0 im entsprechenden Element), es kann so hell wie möglich sein (ein Wert von 1,0), oder es kann ein Level dazwischen sein. Die Farben, die durch die Linsen kommen, kombinieren, um die endgültige Farbe des Lichts zu machen. Eine Kombination wie R(1.0), G(1.0), B(1.0) erzeugt ein weißes Licht, wobei R(0,0), G(0,0), B(0,0) überhaupt kein Licht ausstrahlt. Sie können ein Licht erstellen, das nur eine Komponente ausstrahlt, was zu einem reinen roten, grünen oder blauen Licht führt; oder das Licht könnte Kombinationen verwenden, um Farben wie Gelb oder Lila auszustrahlen. Sie können sogar negative Farbkomponentenwerte festlegen, um ein "dunkles Licht" zu erstellen, das tatsächlich Licht aus einer Szene entfernt. Oder Sie können die Komponenten auf einen Wert festlegen, der größer als 1,0 ist, um ein extrem helles Licht zu erzeugen.

Bei Materialien stellen Farbwerte dagegen dar, wie viel von einer Lichtkomponente durch eine Oberfläche reflektiert wird, die mit diesem Material gerendert wird. Ein Material, dessen Farbkomponenten R(1.0), G(1.0), B(1.0), A(1,0) sind, spiegelt das licht, das seinen Weg gibt. Ebenso spiegelt ein Material mit R(0,0), G(1,0), B(0,0), A(1,0) das grüne Licht wider, das darauf gerichtet ist. Materialien weisen mehrere Reflektionswerte auf, um verschiedene Arten von Effekten zu erzeugen.

Zusätzliche Informationen sind in: Lichttypen (Direct3D 9)und Lichteigenschaften (Direct3D 9).

Erste Schritte