7.1.5.5        Comuni Tranelli sul Colore



La varietà e la complessità dei metodi relativi alla specificazione del colore possono condurre ad alcuni comuni errori. Vi sono alcune cose da considerare quando si specifica un colore.
Quando si usa un valore di filtro, i colori che lo attraversano vengono moltiplicati per le componenti del colore a cui si riferisce il filtro. Per esempio, se la luce è grigia (rgb < 0.9, 0.9, 0.9 >) il passaggio attraverso un filtro rgbf < 1.0, 0.5, 0.0, 1.0 > darà come risultato il colore rgb < 0.9, 0.45, 0.0 > dove la componente rossa non viene modificata, il valore della componente verde viene dimezzato passando da 0,9 a 0,45 ed il blu risulta totalmente bloccato. Spesso si pensa di definire un oggetto completamente trasparente con la frase

color filter 1.0

ma questo comporta un valore uguale a zero per le componenti di rosso, verde e blu. In questo modo si specifica, infatti, un filtro totalmente nero che impedisce il passaggio della luce. La procedura corretta è descritta dagli esempi che seguono:

color red 1.0 green 1.0 blue 1.0 filter 1.0

oppure

color transmit 1.0

Nel secondo esempio i valori di rgb non sono importanti. Tutte le componenti della luce non verranno modificate da questo filtro.
Un altro errore comune è l'uso di identificatori di colore insieme alle parole chiavi relative al colore. Per esempio:

color Mio_Colore red 0.5

sostituisce qualunque valore della componente rossa in Mio_Colore con una componente rossa di 0.5.

color Mio_Colore + red 0.5

invece, aggiunge 0.5 alla componente rossa di Mio_Colore e chiaramente....

color Mio_Colore * red 0.5

dimezza la componente rossa, come era prevedibile, ma moltiplica anche le componenti verde, blu, filtro e quella della trasparenza per zero! Dopo questa moltiplicazione il risultato dell'espressione è rgbft < 0.5, 0, 0, 0, 0 >.
Nell'esempio seguente i risultati non modificano Mio_Colore.

color red 0.5 Mio_Colore

Questo perché l'identificatore sovrascrive completamente il valore precedente. Quando si usano identificatori con parole chiave del colore, l'identificatore dovrebbe essere al primo posto.
Infine, alcune sintassi di POV-Ray consentono specificazioni del colore, ma usano solo la parte rgb. In questi casi è consentito usare un valore decimale là dove un colore ne abbia bisogno. Per esempio:

finish { ambient 1 }

La parola chiave ambient richiede la specificazione di un colore, così il valore 1 diventa il vettore < 1, 1, 1, 1, 1 >.
Anche

pigment { color 0.4 }

è consentito, ma potrebbe essere diverso da ciò che intendi. Lo 0.4 diventa < 0.4, 0.4, 0.4, 0.4, 0.4 > col filtro e la trasparenza impostati a 0.4. E' più probabile che tu volessi...

pigment { color rgb 0.4 }

in questo caso ci si aspetta un vettore a 3 componenti. Perciò lo 0.4 è promosso a < 0.4, 0.4, 0.4, 0.0, 0.0 > con un valore pari a zero sia per il filtro che per la trasparenza.