4.5.4 Differenza



Ruotiamo l'intersezione del paragrafo precedente attorno all'asse delle y in modo che la parte larga si trovi di fronte alla macchina fotografica.

intersection{
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
rotate 90*y
}

Creiamo un cilindro e piazziamolo nel centro della lente.

cylinder { <0, 0, -1> <0, 0, 1>, .35
pigment { Blue }
}

Renderizziamo la scena per vedere la posizione del cilindro.

Fig. 65

Metteremo un blocco difference attorno all'intersezione ed al cilindro in questo modo :

difference {
intersection {
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
pigment { Red }
rotate 90*y
}
cylinder { <0, 0, -1> <0, 0, 1>, .35
pigment { Blue }
}
}

Renderizziamo nuovamente il file.

Fig. 66-Differenza

Vediamo l'intersezione con un foro nel mezzo, dove si trovava il cilindro. Il cilindro è stato sottratto dall'intersezione. Nota che il colore del cilindro fa sì che la superficie del buco sia colorata in blu. Se eliminiamo questo colore nella frase cylinder la superficie del buco sarà blu.
OK, andiamo avanti. Dichiariamo la nostra lente perforata in modo da assegnarle un nome. Eliminiamo anche tutte le texture perché vogliamo specificarle solo nell'unione finale.

#declare Lens_With_Hole = difference {
intersection {
sphere { <0, 0, 0>, 1
translate -0.5*x
}
sphere { <0, 0, 0>, 1
translate 0.5*x
}
rotate 90*y
}
cylinder { <0, 0, -1> <0, 0, 1>, .35 }
}

Usiamo un oggetto unione per costruire un oggetto complesso composto di copie della 'lente' :

union {
object { Lens_With_Hole translate <-.65, .65, 0> }
object { Lens_With_Hole translate <.65, .65, 0> }
object { Lens_With_Hole translate <-.65, -.65, 0> }
object { Lens_With_Hole translate <.65, -.65, 0> }
pigment { Red }
}

Renderizziamo la scena.

Fig. 67-Unione delle differenze

Un oggetto sicuramente interessante. Ma proviamo a spingerci oltre. Rendiamolo parzialmente trasparente aggiungendo una componente di filtro al blocco pigment.

union {
object { Lens_With_Hole translate <-.65, .65, 0> }
object { Lens_With_Hole translate <.65, .65, 0> }
object { Lens_With_Hole translate <-.65, -.65, 0> }
object { Lens_With_Hole translate <.65, -.65, 0> }
pigment { Red filter .5 }
}

Renderizziamo nuovamente il file.

Fig. 68-Come sopra, ma trasparente

Questo è abbastanza bello, ma... possiamo vedere parti di ciascuno degli oggetti 'lente' all'interno dell'unione. Questo non va bene.