Illuminazione diffusa (Direct3D 9)
Dopo aver regolato l'intensità della luce per eventuali effetti di attenuazione, il motore di illuminazione calcola quanta parte della luce rimanente viene riflessa da un vertice, considerando l'angolo della normale del vertice e la direzione della luce incidente. Il motore di illuminazione passa a questo passaggio per le luci direzionali perché non si attenuano con la distanza. Il sistema considera due tipi di reflection, diffusi e speculari e usa una formula diversa per determinare la quantità di luce riflessa per ognuna. Dopo aver calcolato le quantità di luce riflessa, Direct3D applica questi nuovi valori alle proprietà di riflettenza diffusa e speculare del materiale corrente. I valori dei colori risultanti sono i componenti diffusi e speculari usati dal rasterizzatore per produrre l'ombreggiatura gouraud e l'evidenziazione speculare.
L'illuminazione diffusa è descritta dall'equazione seguente.
Illuminazione diffusa = sum[Cd*Ld*(N.Ldir)*Atten*Spot]
Parametro | Valore predefinito | Digitare | Descrizione |
---|---|---|---|
somma | Non disponibile | N/D | Sommazione del componente diffuso di ogni luce. |
Cd | (0,0,0,0) | D3DCOLORVALUE | Colore diffuso. |
Ld | (0,0,0,0) | D3DCOLORVALUE | Colore diffuso chiaro. |
N | N/D | D3DVECTOR | Normale vertice |
Ldir | N/D | D3DVECTOR | Vettore di direzione dal vertice dell'oggetto alla luce. |
Attenzione | N/D | GALLEGGIARE | Attenuazione della luce. Vedere Attenuazione e Fattore Spotlight (Direct3D 9). |
Posto | Non Applicabile | GALLEGGIARE | Fattore spotlight. Consultare Attenuazione e Fattore di concentrazione (Direct3D 9). |
Il valore di Cd è:
- vertex color1, se DIFFUSEMATERIALSOURCE = D3DMCS_COLOR1 e il primo colore del vertice viene fornito nella dichiarazione del vertice.
- vertex color2, se DIFFUSEMATERIALSOURCE = D3DMCS_COLOR2 e il secondo colore del vertice viene fornito nella dichiarazione del vertice.
- materiale colore diffuso
Nota
Se viene utilizzata una delle opzioni DIFFUSEMATERIALSOURCE e il colore del vertice non viene fornito, viene utilizzato il colore diffuso del materiale.
Per calcolare l'attenuazione (Atten) o le caratteristiche dello spotlight (Spot), vedere Attenuazione e Spotlight Factor (Direct3D 9).
I componenti diffusi sono bloccati da 0 a 255, dopo che tutte le luci vengono elaborate e interpolate separatamente. Il valore di illuminazione diffusa risultante è una combinazione dei valori di luce ambientale, diffusi ed emissivi.
Esempio
In questo esempio, l'oggetto viene colorato utilizzando il colore diffuso chiaro e un colore diffuso del materiale. Il codice è illustrato di seguito.
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);
In base all'equazione, il colore risultante per i vertici dell'oggetto è una combinazione del colore del materiale e del colore della luce.
Le due illustrazioni seguenti mostrano il colore del materiale, che è grigio, e il colore chiaro, che è rosso brillante.
La scena risultante è illustrata nella figura seguente. L'unico oggetto nella scena è una sfera. Il calcolo dell'illuminazione diffusa prende il colore diffuso del materiale e della luce e lo modifica in base all'angolo tra la direzione della luce e la normale del vertice usando il prodotto punto. Di conseguenza, il retro della sfera diventa più scuro come la superficie della sfera si allontana dalla luce.
Combinando l'illuminazione diffusa con l'illuminazione ambientale dell'esempio precedente, l'intera superficie dell'oggetto viene ombreggiata. La luce ambientale oscura l'intera superficie e la luce diffusa aiuta a rivelare la forma 3D dell'oggetto, come illustrato nella figura seguente.
La calcolazione dell'illuminazione diffusa è più complessa rispetto all'illuminazione ambientale. Poiché dipende dalle normali dei vertici e dalla direzione della luce, è possibile visualizzare la geometria degli oggetti nello spazio 3D, che produce un'illuminazione più realistica rispetto all'illuminazione ambientale. È possibile usare evidenziazioni speculari per ottenere un aspetto più realistico.
Argomenti correlati