|
difference{...} |
|
L'operazion "difference" sottrae tutti gli oggetti seguenti del'oggetto di base.
Con questa operazione è possibile di fare un buco ou scavare ou tagliare via ogni forma
desiderata.
Quest'operazione è come una fresatrice - la forma della fresa è la somma delle forme
degli oggetti sequenti al'oggetto di base - il primo oggetto della "difference".
Il "buco" riceve la testura del'oggetto sottratto. Questo è la teoria.
La trappola perfida seguente - non solo per i novellini - è il trabocchetto
che provoca molte frustrazioni:
Cioè il problema delle "superfici coincidenti".
Nel caso che un oggetto a sottrarre non ha le sue superfici univoco fuori del'oggetto
dove sarà sottratto, il programma non può decidere se deve sottrarre un punto di
questo superfice ou no. E solitamente qualche macchie strane apparìscono dove il buco
è aspettato.
Questo non è un errore del programma!
Quest'effetto ha l'origine nel problemi numerichi perchè è inevitabile che un computer
deve arrotondare le cifre.
Perciò è essenziale di evitare superfici coincidenti se usiamo quest'operazione.
(Vedi anche "Superfici coincidenti")
Il difetto:
difference{
box{ <-0.5,0.0,-0.1>,< 0.5,1.0,0.1>
texture{ pigment{ color rgb<1,0.65,0>}
finish { phong 1.0 }}
}
box{ <-0.3,0.2,-0.1>,< 0.3,0.8,0.1>
texture{ pigment{ color Magenta}
finish { phong 1.0 }}
}
rotate<0,-30,0> translate<0,0,0>} |
|
|
La soluzione:
#declare D = 0.001; // just a little bit !
difference{
box{ <-0.5,0.0,-0.1>,< 0.5,1.0,0.1>
texture{ pigment{ color rgb<1,0.65,0>}
finish { phong 1.0 }}
}
box{ <-0.3,0.2,-0.1-D>,< 0.3,0.8,0.1+D>
texture{ pigment{ color Magenta }
finish { phong 1.0 }}
}
rotate<0,-30,0> translate<0,0,0>} |
|
|
|