Condividi tramite


Proprietà luce (Direct3D 9)

Le proprietà light descrivono il tipo e il colore di una sorgente luminosa. 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 utilizzano 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à della 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 modo in cui la luce emette si comporta sulla distanza. Come per tutte le proprietà di luce usate in C++, queste sono contenute nella struttura di 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 è alla 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 esterni all'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. Ognuno di essi è 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 riflessione speculare del materiale e così via. Per informazioni specifiche sul modo in cui Direct3D applica questi colori, vedere Matematica dell'illuminazione (Direct3D 9).

In un'applicazione C++, la struttura D3DLIGHT9 include tre membri per questi colori: 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ù diffuso è 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 o usare la luce verde per un segnale di traffico impostato su "Go".

In genere, i componenti del colore chiaro vengono impostati sui valori compresi tra 0,0 e 1,0 inclusi, ma questo 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 colore alfa non viene usato.

In genere i colori materiali vengono usati per l'illuminazione. Tuttavia, è possibile specificare che i colori materiali emissivi, ambientali, diffusi e speculari devono essere sostituiti da colori dei vertici diffusi o speculari. Questa operazione viene eseguita chiamando SetRenderState e impostando le variabili di stato del dispositivo elencate nella tabella seguente.

Variabile di stato del dispositivo Significato Digitare Default
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 materiale emissivo. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Disabilita o abilita l'uso dei colori dei vertici. BOOL VERO

 

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

Il valore della 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 del vertice 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 usata 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 di <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 luce

La posizione della luce viene descritta utilizzando 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ù luce emessa 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