Condividi tramite


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.

illustrazione di una sfera grigia illustrazione di una sfera rossa

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.

illustrazione di una sfera con illuminazione diffusa

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.

illustrazione di una sfera con illuminazione diffusa e illuminazione ambientale

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.

matematica dell'illuminazione