|
difference{...} |
|
Une opération "différence" soustrait d'un objet de base tous les objets
secondaires du premier. On peut ainsi percer des trous et former toutes sortes de reliefs
ou de creux. Cette commande est comme une machine à percer, le trou principal à la forme
des objets qui suivront de la base. Le trou a la texture de l'objet soustrait.
C'est la théorie.
Le piège insidueux - pas seulement pour les débutants – est un gouffre
qui entraine beaucoup de frustrations :
C'est le problème des "surfaces de coïncidences". Si l'objet soustrait a des surfaces
ambigües extérieures à l'objet soustrait, le programme n'est pas capable de savoir si
un point de cette surface est soustraite ou non. La plupart du temps des points bariolés
apparaissent à la place du trou ! Ce n'est pas une erreur du programme. L'origine de cet
effect provient de l'arrondi que font les ordinateurs ! This effect has his origine in
numerical problems because of inavoidable rounding by computers.
Il est essentiel d'éviter les surfaces coïncidentes en utilisant cette instruction.
(Voir aussi : "Surfaces coïncidentes")
Le défaut :
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 Solution :
#declare D = 0.001; // Un très petit peu !
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>} |
|
|
|