\\ Home : Articoli : Stampa
Gamma Correction
Di RobyDx (del 03/08/2007 @ 09:58:19, in DirectX9, linkato 1739 volte)

La gamma correction è la gestione della luminosità dei colori sullo schermo. Ognuno dei 16 milioni di colori che le schede di oggi supportano ha un diverso grado di luminosità espresso con un valore da 0 a 65535 permettendo migliore resa grafica. Molte schede danno la possibilità di modificare la gamma del monitor ma DirectX permette di farlo dinamicamente nei giochi fullscreen. Possibilità? Potete ad esempio scurire tutti i colori per creare chiusure degli schermi o aumentarli per far sembrare più luminosa una stanza. Potete addirittura aumentare solo una tonalità per far virare i colori verso quello che volete.

Dim rampa As GammaRamp
device.SetGammaRamp(0, False, rampa)

0 è il numero dello swap chain (lasciatelo a zero), mentre il booleano indica se vogliamo calibrare (migliore resa maggiore pesantezza, controllate la compatibilità).

l'oggetto rampa di tipo GammaRamp permette di ricevere o settare i valori di luminosità di ognuno dei 256 valori di ogni colore (rosso, verde e blu).

Dichiarate un array di short

Dim lumin(255) As Short

impostate i valori ed assegnatelo ad un colore

rampa.SetRed(lumin)

Ora il rosso ha i valori di luminosità scelti. Fatelo per tutti e passatelo al device tramite l'istruzione setGammaRamp. Nota bene che gli short non vanno da 0 a 65356. I valori saranno compresi tra -32.768 e 32.767. La gamma normale per ogni colore si calcola ponendo a 0 il primo valore dell'array, n il secondo, 2n il terzo, 3n il quarto e così via. Se si supera il valore di 32767 si continua contando da -32768 e proseguendo (-32768+n, -32768+2n e così via). Il valore n compreso tra 0 e 255 rappresenta la luminosità (a 0 è nero, a 255 il massimo). Potete ovviamente modificare solo gli array dei colori che vi servono.

Vi lascio un esempio che modifica la gamma dei 3 colori comtemporaneamente (da bianco a nero).

Esempio VB.Net