Diffuse Beleuchtung (Direct3D 9)

Nach Anpassung der Lichtintensität für Dämpfungseffekte berechnet die Lichtmaschine, wie viel des verbleibenden Lichts von einem Scheitelpunkt reflektiert wird, unter Berücksichtigung des Winkels des Vertexnormal und der Richtung des einfallenden Lichts. Die Beleuchtungs-Engine springt zu diesem Schritt für gerichtete Lichter, da sie nicht über die Entfernung abschwächen. Das System berücksichtigt zwei Reflektionstypen, diffus und spekulär, und verwendet eine andere Formel, um zu bestimmen, wie viel Licht für jeden reflektiert wird. Nach der Berechnung der reflektierten Lichtmengen wendet Direct3D diese neuen Werte auf die diffusen und spekulären Reflektionseigenschaften des aktuellen Materials an. Die resultierenden Farbwerte sind die diffusen und spiegelförmigen Komponenten, die der Rasterisierer verwendet, um Gouraud-Schattierung und glanzige Hervorhebung zu erzeugen.

Diffuse Beleuchtung wird durch die folgende Gleichung beschrieben.

Diffuse Beleuchtung = summe[Cd*Ld*(N. Ldir)*Atten*Spot]

Parameter Standardwert type BESCHREIBUNG
Sum Summierung der diffusen Komponente jedes Lichts.
Cd (0,0,0,0) D3DCOLORVALUE Diffuse Farbe.
Ld (0,0,0,0) D3DCOLORVALUE Licht diffuse Farbe.
N D3DVECTOR Scheitelpunktnormal
Ldir D3DVECTOR Richtungsvektor vom Objektvertex zum Licht.
Atten GLEITKOMMAZAHL Lichtdämpfung. Siehe Dämpfung und Blickpunktfaktor (Direct3D 9).
Sofortige Zahlung GLEITKOMMAZAHL Spotlight-Faktor. Siehe Dämpfung und Blickpunktfaktor (Direct3D 9).

 

Der Wert für Cd lautet entweder:

  • vertex color1, if DIFFUSEMATERIALSOURCE = D3DMCS_COLOR1, und die erste Vertexfarbe wird in der Vertexdeklaration angegeben.
  • vertex color2, if DIFFUSEMATERIALSOURCE = D3DMCS_COLOR2, and the second vertex color is in the vertex declaration.
  • Material diffuse Farbe

Hinweis

Wenn eine DIFFUSEMATERIALSOURCE-Option verwendet wird und die Vertexfarbe nicht angegeben wird, wird die diffuse Farbe des Materials verwendet.

 

Informationen zum Berechnen der Dämpfung (Atten) oder der Scheinwerfermerkmale (Spot) finden Sie unter Dämpfung und Spotlight-Faktor (Direct3D 9).

Diffuse Bauteile werden von 0 bis 255 eingespannt, nachdem alle Leuchten separat verarbeitet und interpoliert werden. Der resultierende diffuse Lichtwert ist eine Kombination aus den Werten für umgebungs-, diffus- und emissives Licht.

Beispiel

In diesem Beispiel wird das Objekt mit der hellen diffusen Farbe und einer diffusen Materialfarbe gefärbt. Der Code wird unten gezeigt.

D3DMATERIAL9 mtrl;
ZeroMemory( &mtrl, sizeof(mtrl) );

D3DLIGHT9 light;
ZeroMemory( &light, sizeof(light) );
light.Type = D3DLIGHT_DIRECTIONAL;

D3DXVECTOR3 vecDir;
vecDir = D3DXVECTOR3(0.5f, 0.0f, -0.5f);
D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );

// set directional light diffuse color
light.Diffuse.r = 1.0f;
light.Diffuse.g = 1.0f;
light.Diffuse.b = 1.0f;
light.Diffuse.a = 1.0f;
m_pd3dDevice->SetLight( 0, &light );
m_pd3dDevice->LightEnable( 0, TRUE );

// if a material is used, SetRenderState must be used
// vertex color = light diffuse color * material diffuse color
mtrl.Diffuse.r = 0.75f;
mtrl.Diffuse.g = 0.0f;
mtrl.Diffuse.b = 0.0f;
mtrl.Diffuse.a = 0.0f;
m_pd3dDevice->SetMaterial( &mtrl );
m_pd3dDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);

Gemäß der Gleichung ist die resultierende Farbe für die Objektvertices eine Kombination aus der Materialfarbe und der Lichtfarbe.

Die folgenden beiden Abbildungen zeigen die Materialfarbe, die grau ist, und die helle Farbe, die leuchtend rot ist.

Abbildung einer grauen Kugelillustration einer roten Kugel

Die resultierende Szene ist in der folgenden Abbildung dargestellt. Das einzige Objekt in der Szene ist eine Kugel. Die Berechnung der diffusen Beleuchtung nimmt das Material und die lichtstreue Farbe und ändert sie anhand des Punktprodukts durch den Winkel zwischen Lichtrichtung und Vertexnormal. Dadurch wird die Rückseite der Kugel dunkler, wenn sich die Oberfläche der Kugel vom Licht entfernt.

Abbildung einer Kugel mit diffuser Beleuchtung

Die Kombination der diffusen Beleuchtung mit der Umgebungsbeleuchtung aus dem vorherigen Beispiel schattiert die gesamte Oberfläche des Objekts. Das Umgebungslicht schattiert die gesamte Oberfläche, und das diffuse Licht hilft, die 3D-Form des Objekts zu offenbaren, wie in der folgenden Abbildung gezeigt.

Abbildung einer Kugel mit diffuser Beleuchtung und Umgebungsbeleuchtung

Diffuse Beleuchtung ist intensiver zu berechnen als Umgebungsbeleuchtung. Da es von den Vertexnormalen und der Lichtrichtung abhängt, können Sie die Objekte im 3D-Raum sehen, was eine realistischere Beleuchtung als die Umgebungsbeleuchtung erzeugt. Sie können glanzreiche Hervorhebungen verwenden, um ein realistischeres Aussehen zu erzielen.

Mathematik der Beleuchtung