Illuminazione diffusa (Direct3D 9)
Dopo aver regolato l'intensità della luce per qualsiasi effetto di attenuazione, il motore di illuminazione calcola la quantità di luce rimanente riflette da un vertice, dato l'angolo della normale vertice e la direzione della luce incidente. Il motore di illuminazione passa a questo passaggio per le luci direzionali perché non attenuano 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 riflessione diffusa e speculare del materiale corrente. I valori di colore 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 | Tipo | Descrizione |
---|---|---|---|
Sum | N/D | 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. |
Atten | N/D | FLOAT | Attenuazione della luce. Vedere Attenuazione e fattore spotlight (Direct3D 9). |
Spot (Contante) | N/D | FLOAT | Fattore spotlight. Vedere Attenuazione e fattore spotlight (Direct3D 9). |
Il valore per 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.
- colore diffuso del materiale
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 dei contenuti in evidenza (Spot), vedere Attenuazione e fattore spotlight (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, diffusa ed emissiva.
Esempio
In questo esempio, l'oggetto viene colorato usando 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 accetta il colore diffuso del materiale e della luce e lo modifica in base all'angolo tra la direzione della luce e la normale vertice usando il prodotto punto. Di conseguenza, il lato posteriore 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.
L'illuminazione diffusa è più intensa per calcolare l'illuminazione ambientale. Poiché dipende dalle normali dei vertici e dalla direzione della luce, è possibile vedere 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