Share via


Leuchten und Materialien (Direct3D 9)

Beleuchtung wird verwendet, um Objekte in einer Szene zu beleuchten. Wenn die Beleuchtung aktiviert ist, berechnet Direct3D die Farbe jedes Objektvertex basierend auf einer Kombination aus:

Hinweis

Dieser Abschnitt gilt nur für die Pipeline mit festen Funktionen. Programmierbare Shader führen die gesamte Beleuchtung explizit aus.

 

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

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

Wie Sie mit Beleuchtung und Materialien arbeiten, macht einen großen Unterschied in 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. Lichter sind zum Rendern einer Szene nicht erforderlich, aber Details in einer Szene, die ohne Licht gerendert wird, sind nicht sichtbar. Das Rendern einer unbeleuchteten Szene führt bestenfalls zu einer Silhouette der Objekte in der Szene. Dies ist für die meisten Zwecke nicht ausreichend.

Direktes Licht im Vergleich zu Umgebungslicht

Obwohl sowohl direktes Als auch Umgebungslicht Objekte in einer Szene beleuchten, sind sie unabhängig voneinander, haben aber 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 Lichtern geben auf unterschiedliche Weise direktes Licht 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 effektiv überall in einer Szene. Sie können es sich als eine allgemeine Lichtebene vorstellen, die eine gesamte Szene ausfüllt, unabhängig von den Objekten und ihren Orten 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 Umgebungslichtstufe mit einem Aufruf der IDirect3DDevice9::SetRenderState-Methode fest, indem Sie D3DRS_AMBIENT als State-Parameter und die gewünschte RGBA-Farbe als Value-Parameter angeben.

Die 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 sich, um die endgültige Farbe des Umgebungslichts zu machen. Die Alphakomponente steuert die Transparenz der Farbe. Bei Verwendung von Hardwarebeschleunigung oder RGB-Emulation wird die Alphakomponente ignoriert.

Direct3D Light Model vs. Nature

In der Natur wird Licht, wenn von einer Quelle emittiert wird, von Hunderten, wenn nicht Tausenden oder Millionen von Objekten reflektiert, bevor es das Auge des Benutzers erreicht. Jedes Mal, wenn es reflektiert wird, wird etwas Licht von einer Oberfläche absorbiert, einige werden in zufällige Richtungen gestreut, und der Rest geht auf eine andere Oberfläche oder auf das Auge des Benutzers weiter. 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 von Licht perfekt zu simulieren, zu zeitaufwändig, um für Direct3D-Echtzeitgrafiken zu verwenden. Daher entspricht das Direct3D-Lichtmodell unter Berücksichtigung der Geschwindigkeit 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 in Direct3D Licht von einer Oberfläche reflektiert wird, interagiert die Lichtfarbe mathematisch mit der Oberfläche selbst, um die Farbe zu erzeugen, die schließlich auf dem Bildschirm angezeigt wird. Spezifische Informationen zu den Algorithmen, die Direct3D verwendet, finden Sie unter Mathematik der Beleuchtung (Direct3D 9).

Das Direct3D-Lichtmodell generalisiert Licht in zwei Arten: Umgebungslicht und direktes Licht. Jedes hat unterschiedliche Attribute und interagiert auf unterschiedliche Weise mit dem Material einer Oberfläche. Umgebungslicht ist Licht, das so sehr gestreut wurde, dass seine Richtung und Quelle unbestimmt sind: Es behält überall eine geringe Intensität bei. 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 die Umgebungslichtebene völlig unabhängig von allen 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 bewegt sich in eine angegebene Richtung. Direktes Licht interagiert mit dem Material einer Oberfläche, um spiegelfähige Hervorhebungen zu erzeugen, und seine Richtung wird als Faktor für Schattierungsalgorithmen verwendet, einschließlich der Gouraud-Schattierung. Wenn direktes Licht reflektiert wird, trägt es nicht zum Umgebungslicht in einer Szene bei. Die Quellen in einer Szene, die direktes Licht erzeugen, haben unterschiedliche Eigenschaften, die sich auf die Ausleuchtung einer Szene auswirken.

Darüber hinaus verfügt das Material eines Polygons über Eigenschaften, die beeinflussen, wie dieses Polygon das empfangene Licht reflektiert. Sie legen ein einzelnes Reflektionsmerkmal fest, das beschreibt, wie das Material das Umgebungslicht reflektiert, und sie legen individuelle Merkmale fest, um die spiegelhafte und diffuse Reflexion des Materials zu bestimmen. Weitere Informationen finden Sie unter Materialien (Direct3D 9).

Farbwerte für Leuchten und Materialien

Direct3D beschreibt die Farbe in Bezug auf vier Komponenten – Rot, Grün, Blau und Alpha –, die zu einer endgültigen Farbe kombiniert werden. 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 reicht. Obwohl sowohl Leuchten als auch Materialien die gleiche Struktur verwenden, um Die Farbe zu beschreiben, werden die Werte in der Struktur von jedem etwas unterschiedlich verwendet.

Farbwerte für Lichtquellen stellen die Menge einer bestimmten Lichtkomponente dar, die sie ausgibt. Da leuchten 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 kann ausgeschaltet sein (ein Wert von 0,0 im entsprechenden Element), es kann so hell wie möglich sein (ein Wert von 1,0), oder es kann eine Ebene 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, bei dem R(0,0), G(0,0), B(0,0) überhaupt kein Licht emittiert. Sie können ein Licht herstellen, das nur eine Komponente ausgibt, 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 größer als 1,0 festlegen, um ein extrem helles Licht zu erzeugen.

Bei Materialien hingegen geben Farbwerte an, wie viel einer Lichtkomponente von einer 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, reflektiert das gesamte Licht, das auf seinen Weg kommt. Ebenso reflektiert ein Material mit R(0.0), G(1.0), B(0.0), A(1.0) das gesamte grüne Licht, das darauf gerichtet ist. Materialien verfügen über mehrere Reflektionswerte, um verschiedene Arten von Effekten zu erzeugen.

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

Erste Schritte