C'est parti ! Commençons notre luth...

Comme on le voit sur ce schéma, le luth est composé :
- d'une demi-sphère allongée à laquelle on a retiré une (demi-)sphère en son centre ;
- de deux demi-cylindres perpendiculaires ;
- d'une demi-sphère aplatie.
On pourrait, bien entendu, faire tout ça avec plein de différences. Mais ce serait un peu confus (et surtout moins rigolo...), donc on va utiliser une intersection.
En effet, l'intersection des deux cylindres et des deux sphères permettrait de faire la même chose !
Notre objet sera donc l'intersection d'une union et d'une boîte.
Les coins de la boîte seront <0.6,0,1.50> et <0,-1,-1>, et on va donner la couleur
rgb <0.7,0.4,0.4> au tout.
Voilà donc le début de code :
Code : C 1
2
3
4
5
6
7
8
9
10
11 | intersection {
union {
...
}
box {
<0.6,0,1.50>
<-0.6,-1,-1>
}
pigment { rgb <0.7,0.4,0.4> }
}
|
Reste à compléter l'union !
On va commencer par la sphère allongée principale. C'est à la base une sphère centrée en 0, de rayon 0.5, à laquelle on va appliquer un
scale <1,1,1.5> pour l'allonger le long de l'axe des z :
Code : C1
2
3
4
5 | sphere {
<0,0,0>
0.5
scale <1,1,1.5>
}
|
L'intersection suffit à la couper en deux. En effet, si l'on essaye ce code :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | intersection {
union {
sphere {
<0,0,0>
0.5
scale <1,1,1.5>
}
}
box {
<0.6,0,1.50>
<-0.6,-1,-1>
}
pigment { rgb <0.7,0.4,0.4> }
}
|
on obtient quelque chose comme ça :
Ensuite, on ajoute le cylindre : il va de <0,0,0> à <0,0,1.5>, et a un rayon de 0.1. Lui aussi sera automatiquement coupé en deux par l'intersection.
Voici donc le code (uniquement de l'union cette fois) :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12 | union {
sphere {
<0,0,0>
0.5
scale <1,1,1.5>
}
cylinder {
<0,0,0>
<0,0,1.5>
0.1
}
}
|
Le deuxième cylindre part de <0,0,1.5>, et descend jusqu'à <0,-0.5,1.5> ; son rayon est également de 0.1. Voilà ce que ça donne :
La sphère aplatie est un petit peu plus délicate à placer : son centre n'est pas 0, et pourtant on va devoir lui appliquer un
scale. Il va donc falloir la placer en 0 avant le
scale, puis la déplacer avec
translate. Son centre final sera <0,-0.5,1.5>, voici donc le code de cette sphère :
Code : C1
2
3
4
5
6 | sphere {
<0,-0.0,0>
0.15
scale <1,0.6,1>
translate <0,-0.5,1.5>
}
|
Et le résultat :
Une seule chose reste à faire : le trou en sphère. Il suffit de remplacer l'union que nous avons par la différence de cette union avec une sphère, de centre <0,0,0> et de rayon 0.25... et, tant qu'on y est, on peut aussi lui donner une couleur différente qui se retrouvera dans le trou (ici, la même que pour le reste, mais plus clair).
Voici donc le code final, avec camera et lumière :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | camera {
location <0,1,-2.3>
look_at <0,0,0>
}
light_source {
<2,3,-5>
rgb <1,1,1>
}
intersection {
difference {
union {
sphere {
<0,0,0>
0.5
scale <1,1,1.5>
}
cylinder {
<0,0,0>
<0,0,1.5>
0.1
}
cylinder {
<0,0,1.5>
<0,-0.5,1.5>
0.1
}
sphere {
<0,-0.0,0>
0.15
scale <1,0.6,1>
translate <0,-0.5,1.5>
}
}
sphere {
<0,0,0>
0.25
pigment { rgb <0.85,0.6,0.6> }
}
}
box {
<0.6,0,1.50>
<-0.6,-1,-1>
}
pigment { rgb <0.7,0.4,0.4> }
}
|
