Diffuse Beleuchtung (Direct3D 9)
Nachdem die Lichtdichte für alle Dämpfungseffekte angepasst wurde, berechnet das Beleuchtungsmodul, wie viel des verbleibenden Lichts von einem Scheitelpunkt reflektiert wird, unter Berücksichtigung des Winkels der Scheitelpunktnormale und der Richtung des einfallenden Lichts. Das Beleuchtungsmodul überspringt diesen Schritt für gerichtete Beleuchtungen, da sie sich nicht über die Entfernung abschwächen. Das System berücksichtigt die beiden Reflektionstypen diffuse und specular und verwendet eine andere Formel, um zu bestimmen, wie viel Licht für jede reflektiert wird. Nach der Berechnung der reflektierten Lichtmengen wendet Direct3D diese neuen Werte auf die diffusen und specularen Reflexionseigenschaften des aktuellen Materials an. Die resultierenden Farbwerte sind die diffusen und specularen Komponenten, die der Rasterizer verwendet, um Gouraud-Schattierung und Glanzmarkierung zu erzeugen.
Diffuse Beleuchtung wird durch die folgende Gleichung beschrieben.
Diffuse Beleuchtung = Summe [ Cd * Ld * (N. Ldir) * Atten * Spot]
| Parameter | Standardwert | type | Beschreibung |
|---|---|---|---|
| Sum | NICHT ZUTREFFEND | NICHT ZUTREFFEND | Summierung der diffusen Komponente jedes Lichts. |
| Cd | (0,0,0,0) | D3DCOLORVALUE | Diffuse Farbe. |
| Ld | (0,0,0,0) | D3DCOLORVALUE | Hell diffuse Farbe. |
| N | NICHT ZUTREFFEND | D3DVECTOR | Vertex normal |
| Ldir | NICHT ZUTREFFEND | D3DVECTOR | Richtungsvektor vom Objektvertex zum Licht. |
| Atten | NICHT ZUTREFFEND | GLEITKOMMAZAHL | Lichtdämpfung. Weitere Informationen finden Sie unter Dämpfung und Spotlight-Faktor (Direct3D 9). |
| Sofortige Zahlung | NICHT ZUTREFFEND | GLEITKOMMAZAHL | Spotlight-Faktor. Weitere Informationen finden Sie unter Dämpfung und Spotlight-Faktor (Direct3D 9). |
Der Wert für Cd lautet:
- vertex color1, wenn DIFFUSEMATERIALSOURCE = D3DMCS _ COLOR1, und die erste Scheitelpunktfarbe in der Scheitelpunktdeklaration angegeben wird.
- vertex color2, wenn DIFFUSEMATERIALSOURCE = D3DMCS _ COLOR2, und die zweite Scheitelpunktfarbe in der Scheitelpunktdeklaration angegeben wird.
- Material diffuse Farbe
Hinweis
Wenn eine der beiden DIFFUSEMATERIALSOURCE-Optionen verwendet wird und die Scheitelpunktfarbe nicht angegeben wird, wird die diffuse Materialfarbe verwendet.
Informationen zum Berechnen der Dämpfung (Atten) oder der Spotlightmerkmale (Spot) finden Sie unter Dämpfung und Spotlight-Faktor (Direct3D 9).
Diffuse Komponenten werden so klammert, dass sie von 0 bis 255 liegen, nachdem alle Beleuchtungen separat verarbeitet und interpoliert wurden. Der resultierende diffuse Beleuchtungswert ist eine Kombination der Umgebungs-, diffusen und freizügigen Lichtwerte.
Beispiel
In diesem Beispiel wird das Objekt mithilfe der hell diffusen Farbe und einer materialen diffusen Farbe farbig farbig dargestellt. Der Code ist unten dargestellt.
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 hellen Farbe.
Die folgenden beiden Abbildungen zeigen die Materialfarbe , die grau ist, und die helle Farbe, die hellrot ist.


Die resultierende Szene wird in der folgenden Abbildung dargestellt. Das einzige Objekt in der Szene ist eine Kugel. Die diffuse Beleuchtungsberechnung verwendet das Material und die helle diffuse Farbe und ändert sie durch den Winkel zwischen der Lichtrichtung und der Scheitelpunktnormale unter Verwendung des Punktprodukts. Daher wird die Rückseite der Kugel dunkler, wenn sich die Oberfläche der Kugel vom Licht entfernt.

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 dabei, die 3D-Form des Objekts zu erkennen, wie in der folgenden Abbildung dargestellt.

Diffuse Beleuchtung ist schwieriger zu berechnen als Umgebungsbeleuchtung. Da dies von den Scheitelpunktnormale und der Lichtrichtung abhängt, können Sie die Objektgeometrie im 3D-Raum sehen, wodurch eine realistischere Beleuchtung als eine Umgebungsbeleuchtung erzeugt wird. Sie können Glanzlichter verwenden, um ein realistischeres Aussehen zu erzielen.