Diffuse Beleuchtung (Direct3D 9)

Nach dem Anpassen der Lichtintensität für alle Dämpfungseffekte berechnet das Beleuchtungsmodul, wie viel des verbleibenden Lichts von einem Vertex reflektiert wird, da der Winkel des Vertex normal und die Richtung des Vorfalllichts. Die Beleuchtungsmaschine überspringt diesen Schritt für Richtungslichter, weil sie nicht über den Abstand abgeschwächt werden. Das System betrachtet zwei Spiegelungstypen, diffuse und spekulär, und verwendet eine andere Formel, um zu bestimmen, wie viel Licht für jede reflektiert wird. Nach der Berechnung der Lichtmengen, die reflektiert werden, wendet Direct3D diese neuen Werte auf die diffusen und spekulären Spiegelungseigenschaften des aktuellen Materials an. Die resultierenden Farbwerte sind die diffusen und spekulären Komponenten, die der Rasterizer zum Erzeugen von Gouraud-Schattierung und spekulärer Hervorhebung verwendet.

Diffuse Beleuchtung wird durch die folgende Formel beschrieben.

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

Parameter Standardwert type BESCHREIBUNG
Sum Summe der diffusen Komponente jedes Lichts.
Cd (0,0,0,0) D3DCOLORVALUE Diffuse Farbe.
Ld (0,0,0,0) D3DCOLORVALUE Helle diffuse Farbe.
N D3DVECTOR Vertex normal
Ldir D3DVECTOR Richtungsvektor von Objektvertex bis zum Licht.
Atten GLEITKOMMAZAHL Lichtabschwächung. Siehe Dämpfungs- und Spotlight-Faktor (Direct3D 9).
Sofortige Zahlung GLEITKOMMAZAHL Spotlight-Faktor. Siehe Dämpfungs- und Spotlight-Faktor (Direct3D 9).

 

Der Wert für Cd ist entweder:

  • Vertexfarbe1, wenn DIFFUSEMATERIALSOURCE = D3DMCS_COLOR1, und die erste Vertexfarbe wird in der Vertexdeklaration angegeben.
  • Vertexfarbe2, wenn DIFFUSEMATERIALSOURCE = D3DMCS_COLOR2, und die zweite Vertexfarbe wird in der Vertexdeklaration angegeben.
  • Material diffuse Farbe

Hinweis

Wenn eine diffuse MATERIALSOURCE-Option verwendet wird, und die Vertexfarbe nicht bereitgestellt wird, wird die Material diffuse Farbe verwendet.

 

Informationen zum Berechnen der Dämpfung (Atten) oder der Blickpunkteigenschaften (Spot) finden Sie unter Attenuation and Spotlight Factor (Direct3D 9).

Diffuse Komponenten werden von 0 bis 255 geklammert, nachdem alle Leuchten separat verarbeitet und interpoliert werden. Der resultierende diffuse Beleuchtungswert ist eine Kombination aus umgebungs-, diffusen und emissiven Lichtwerten.

Beispiel

In diesem Beispiel wird das Objekt mithilfe der lichtdunden Farbe und einer Materialdiffusfarbe gefärbt. Der Code wird unten angezeigt.

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 Formel 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 Lichtfarbe, die hell rot ist.

illustration of a gray sphereillustration of a red sphere

Die resultierende Szene wird in der folgenden Abbildung angezeigt. Das einzige Objekt in der Szene ist eine Sphäre. Die diffuse Beleuchtungsberechnung übernimmt die Material- und Lichtdundfarbe und ändert ihn durch den Winkel zwischen der Lichtrichtung und dem Vertex normal mit dem Punktprodukt. Dadurch wird die Rückseite der Sphäre dunkler, da die Oberfläche der Sphäre von dem Licht entfernt wird.

illustration of a sphere with diffuse lighting

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, das 3D-Shape des Objekts anzuzeigen, wie in der folgenden Abbildung dargestellt.

illustration of a sphere with diffuse lighting and ambient lighting

Diffuse Beleuchtung ist intensiver zu berechnen als Umgebungsbeleuchtung. Da es von den Vertex normaler und lichtrichtung abhängig ist, können Sie die Objekte geometrie im 3D-Raum sehen, was eine realistischere Beleuchtung als Umgebungsbeleuchtung erzeugt. Sie können spekuläre Hervorhebungen verwenden, um ein realistischeres Aussehen zu erreichen.

Mathematik der Beleuchtung