Proprietà della luce (Direct3D 9)

Le proprietà di luce descrivono il tipo e il colore di una sorgente di luce. A seconda del tipo di luce utilizzata, una luce può avere proprietà per l'attenuazione e l'intervallo o per gli effetti spotlight. Ma non tutti i tipi di luci usano tutte le proprietà. Direct3D usa la struttura D3DLIGHT9 per contenere informazioni sulle proprietà della luce per tutti i tipi di sorgenti di luce. Questa sezione contiene informazioni per tutte le proprietà di luce. Le informazioni sono suddivise nei gruppi seguenti.

Le proprietà di posizione, intervallo e attenuazione definiscono la posizione di una luce nello spazio globale e il comportamento della luce generato sulla distanza. Come per tutte le proprietà di luce usate in C++, queste sono contenute nella struttura D3DLIGHT9 di una luce.

Attenuazione della luce

L'attenuazione controlla il modo in cui l'intensità di una luce diminuisce verso la distanza massima specificata dalla proprietà range. Tre membri della struttura D3DLIGHT9 rappresentano l'attenuazione della luce: Attenuazione0, Attenuazione1 e Attenuazione2. Questi membri contengono valori a virgola mobile compresi tra 0,0 e infinito, controllando l'attenuazione di una luce. Alcune applicazioni impostano il membro Attenuation1 su 1,0 e gli altri su 0,0, con conseguente intensità di luce che cambia come 1 / D, dove D è la distanza dalla sorgente di luce al vertice. L'intensità massima della luce si trova nella sorgente, riducendo a 1 / (intervallo di luce) nell'intervallo della luce. In genere, un'applicazione imposta Attenuazione su 0,0, Attenuazione1 su un valore costante e Attenuazione2 su 0,0.

È possibile combinare i valori di attenuazione per ottenere effetti di attenuazione più complessi. In alternativa, è possibile impostarli su valori al di fuori dell'intervallo normale per creare effetti di attenuazione sconosciuti. I valori di attenuazione negativi, tuttavia, non sono consentiti. Vedere Attenuazione e fattore spotlight (Direct3D 9).

Colore chiaro

Le luci in Direct3D generano tre colori usati in modo indipendente nei calcoli di illuminazione del sistema: un colore diffuso, un colore ambientale e un colore speculare. Ogni oggetto viene incorporato dal modulo di illuminazione Direct3D, che interagisce con una controparte del materiale corrente, per produrre un colore finale usato per il rendering. Il colore diffuso interagisce con la proprietà di riflessione diffusa del materiale corrente, il colore speculare con la proprietà di riflettenza speculare del materiale e così via. Per informazioni specifiche su come Direct3D applica questi colori, vedi Matematica dell'illuminazione (Direct3D 9).

In un'applicazione C++ la struttura D3DLIGHT9 include tre membri per questi colori, ovvero Diffuse, Ambient e Specular, ognuno è una struttura D3DCOLORVALUE che definisce il colore da generare.

Il tipo di colore che si applica maggiormente ai calcoli del sistema è il colore diffuso. Il colore più comune è il bianco (R:1.0 G:1.0 B:1.0), ma è possibile creare colori in base alle esigenze per ottenere gli effetti desiderati. Ad esempio, è possibile usare la luce rossa per un camino oppure è possibile usare la luce verde per un segnale di traffico impostato su "Vai".

In genere, i componenti di colore chiaro vengono impostati su valori compresi tra 0,0 e 1,0, inclusi, ma non è un requisito. Ad esempio, è possibile impostare tutti i componenti su 2.0, creando una luce "più luminosa del bianco". Questo tipo di impostazione può essere particolarmente utile quando si usano impostazioni di attenuazione diverse da costante.

Si noti che anche se Direct3D usa valori RGBA per le luci, il componente di colore alfa non viene usato.

In genere i colori materiali vengono utilizzati per l'illuminazione. Tuttavia, è possibile specificare che i colori del materiale emissivo, ambientale, diffuso e speculare devono essere sottoposti a override da colori dei vertici diffusi o speculari. A tale scopo, chiamare SetRenderState e impostare le variabili di stato del dispositivo elencate nella tabella seguente.

Variabile di stato del dispositivo Significato Type Predefinito
D3DRS_AMBIENTMATERIALSOURCE Definisce dove ottenere il colore del materiale ambientale. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Definisce dove ottenere il colore del materiale diffuso. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Definisce dove ottenere il colore del materiale speculare. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Definisce dove ottenere il colore del materiale emissivo. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Disabilita o abilita l'uso dei colori dei vertici. BOOL TRUE

 

Il valore alfa/trasparenza proviene sempre solo dal canale alfa del colore diffuso.

Il valore di nebbia proviene sempre solo dal canale alfa del colore speculare.

D3DMATERIALCOLORSOURCE può avere i valori seguenti.

  • D3DMCS_MATERIAL : il colore del materiale viene usato come origine.
  • D3DMCS_COLOR1 : il colore dei vertici diffuso viene usato come origine.
  • D3DMCS_COLOR2 : il colore del vertice speculare viene usato come origine.

Direzione luce

La proprietà di direzione di una luce determina la direzione in cui la luce emessa dall'oggetto viaggia, nello spazio globale. La direzione viene utilizzata solo dalle luci direzionali e dai riflettori e viene descritta con un vettore.

Impostare la direzione della luce nel membro Direction della struttura D3DLIGHT9 della luce. Il membro direzionale è di tipo D3DVECTOR. I vettori di direzione vengono descritti come distanze da un'origine logica, indipendentemente dalla posizione della luce in una scena. Pertanto, un riflettore che punta direttamente in una scena, lungo l'asse z positivo, ha un vettore di direzione pari <a 0,0,1> indipendentemente dalla posizione definita. Analogamente, è possibile simulare la luce solare che splende direttamente su una scena usando una luce direzionale la cui direzione è <0,-1,0>. Ovviamente, non è necessario creare luci che risplendono lungo gli assi delle coordinate; è possibile combinare e abbinare valori per creare luci che risplendono ad angoli più interessanti.

Nota

Anche se non è necessario normalizzare il vettore di direzione di una luce, assicurarsi sempre che abbia grandezza. In altre parole, non usare un <vettore di direzione 0,0,0> .

 

Posizione chiara

La posizione della luce viene descritta usando una struttura D3DVECTOR nel membro Position della struttura D3DLIGHT9 . Si presuppone che le coordinate x, y e z siano nello spazio globale. Le luci direzionali sono l'unico tipo di luce che non utilizza la proprietà position.

Intervallo chiaro

La proprietà range di una luce determina la distanza, nello spazio globale, in cui le mesh in una scena non ricevono più la luce generata da tale oggetto. Il membro Range contiene un valore a virgola mobile che rappresenta l'intervallo massimo della luce nello spazio globale. Le luci direzionali non usano la proprietà range.

Luci e materiali