4.10.5.1 Iniziare
con un Arcobaleno Semplice
L'arcobaleno è specificato per
mezzo di molti parametri : l'angolo al quale è visibile, l'ampiezza
della banda colorata, la direzione della luce proveniente, la distanza
(simile a quella specificata per la nebbia) ed infine la mappatura dei
colori da usare.
Dimensione e forma dell'arcobaleno sono determinati dalle parole chiave
angle
e width.
La parola chiave direction
serve ad impostare la direzione da cui proviene la luce in modo da determinare
la posizione dell'arcobaleno. L'arcobaleno è visibile quando l'angolo
tra il vettore direzione e la direzione di provenienza della luce incidente
è compreso tra angle-width/2
e angle+width/2.
La luce di cui stiamo parlando è virtuale, non c'è bisogno
che ci sia una reale sorgente luminosa per creare l'arcobaleno.
L'arcobaleno è un effetto simile alla nebbia, cioè il colore
dell'arcobaleno è mescolato col colore della sfondo in dipendenza
dalla distanza col punto di intersezione. Se scegli piccoli valori di distanza
l'arcobaleno sarà visibile sugli oggetti, non solo contro lo sfondo.
Questo effetto può essere evitato scegliendo grandi valori per distance.
La mappa dei colori è la parte critica dell'arcobaleno poiché
contiene tutti i colori che possono essere normalmente visti nell'arcobaleno.
Il colore della banda più interna è alla posizione 0 mentre
quello della banda più esterna è alla posizione 1. Si dovrebbe
notare che a causa della limitata varietà di colori che un monitor
può normalmente mostrare, è impossibile creare un vero arcobaleno.
Ci sono alcuni colori che semplicemente non è possibile mostrare.
Il canale del filtro della mappatura dei colori dell'arcobaleno funziona
in modo analogo al canale del filtro che usiamo nella nebbia. Determina
quanta parte della luce che attraversa l'arcobaleno è filtrata dal
colore.
Il seguente esempio mostra una semplice scena con un piano che rappresenta
il suolo ed un arcobaleno (un po') esagerato (rainbow1.pov)
#include "colors.inc"
camera {
location <0, 20, -100>
look_at <0, 25, 0>
angle 80
}
background { color SkyBlue }
plane { y, -10 pigment { colour Green } }
light_source {<100, 120, 40> colour White}
// dichiara i colori dell'arcobaleno
#declare r_violet1 = colour rgbf<1.0, 0.5, 1.0, 1.0>
#declare r_violet2 = colour rgbf<1.0, 0.5, 1.0, 0.8>
#declare r_indigo = colour rgbf<0.5, 0.5, 1.0, 0.8>
#declare r_blue = colour rgbf<0.2, 0.2, 1.0, 0.8>
#declare r_cyan = colour rgbf<0.2, 1.0, 1.0, 0.8>
#declare r_green = colour rgbf<0.2, 1.0, 0.2, 0.8>
#declare r_yellow = colour rgbf<1.0, 1.0, 0.2, 0.8>
#declare r_orange = colour rgbf<1.0, 0.5, 0.2, 0.8>
#declare r_red1 = colour rgbf<1.0, 0.2, 0.2, 0.8>
#declare r_red2 = colour rgbf<1.0, 0.2, 0.2, 1.0>
// crea l'arcobaleno
rainbow {
angle 42.5
width 5
distance 1.0e7
direction <-0.2, -0.2, 1>
jitter 0.01
colour_map {
[0.000 colour r_violet1]
[0.100 colour r_violet2]
[0.214 colour r_indigo]
[0.328 colour r_blue]
[0.442 colour r_cyan]
[0.556 colour r_green]
[0.670 colour r_yellow]
[0.784 colour r_orange]
[0.900 colour r_red1]
}
}
![]() |
Fig. 190-Arcobaleno
Abbiamo aggiunto qualche irregolarità
al colore usando la parola chiave jitter.
L'arcobaleno nel nostro esempio è troppo intenso, arcobaleni di
questo genere non esistono nella realtà. Possiamo diminuire l'intensità
dei colori diminuendo i valori RGB nella mappa.
![]() |
![]() |
![]() |