Voilà une autre association d'objets que vous utiliserez énormément : c'est la différence, dont le mot-clé est
difference.
Qu'a-t-elle de si magique ?

Cette association prend le premier objet, puis lui enlève tout ce qui appartient aux autres.
Vous commencez à voir ?
Par exemple, pour faire une demi-sphère, il suffit de faire ça :
Code : C 1
2
3
4
5
6
7
8
9
10
11 | difference {
sphere {
<0,0,0>
1
pigment { rgb <1,0,0> }
}
box {
<-2,-2,-2>
<2,0,2>
}
}
|
Et voilà ce que ça donne :

Super, non ?
Il faut savoir que la couleur de la nouvelle face est celle de l'autre objet...
Qu'est-ce que ça veut dire ?
Que si on regarde par en-dessous, pour voir la nouvelle face créée par la différence, elle sera noire !

Petit problème !
Il y a deux méthodes pour remédier à cela :
- Donner la même couleur à la boîte : comme cela, la nouvelle face sera également rouge.
- Donner la couleur rouge à la différence au lieu de la sphère.
La deuxième solution est bien plus pratique si notre objet est de couleur uniforme, comme ici !
Voilà donc le résultat, avec ce code-là :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12 | difference {
sphere {
<0,0,0>
1
}
box {
<-2,-2,-2>
<2,0,2>
}
pigment { rgb <1,0,0> }
}
|
Mais si, maintenant, on remet la zone pigment dans la sphère, et que l'on donne un autre couleur à la boîte, comme bleu par exemple :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13 | difference {
sphere {
<0,0,0>
1
pigment { rgb <1,0,0> }
}
box {
<-2,-2,-2>
<2,0,2>
pigment { rgb <0,0,1> }
}
}
|

Sympa

on a fait une demi-sphère mi-rouge, mi-bleue...
Maintenant, on va faire un quart de sphère. Comment faire ? Très simple ! Il suffit d'ajouter une autre boîte !
Lors de différence où l'on retire plusieurs objets, on utilise souvent une union pour plus de clarté.
On va donc soustraire à notre sphère une union, composée des deux boîtes !
Et voilà le travail :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | difference {
sphere {
<0,0,0>
1
pigment { rgb <1,0,0> }
}
union {
box {
<-2,-2,-2>
<2,0,2>
pigment { rgb <0,0,1> }
}
box {
<-2,-2,-2>
<0,2,2>
pigment { rgb <0,1,0> }
}
}
}
|
Et le résultat :
Voilà tout pour la différence !
Évidemment, comme pour l'union, on peut appliquer des rotations, des translations, etc... directement à la différence !