Bon, je vous l'accorde, réaliser cette tour tout seul n'est pas très facile...
Cependant, la grande difficulté n'est pas dans le langage, mais dans la conception de la scène !
Le plus difficile dans une scène en 3D est de bien positionner les objets, et non de savoir comment les coder...
Partie 1 : caméra et lumière
On va commencer par les essentiels : lumière et caméra.
Code : C1
2
3
4
5
6
7
8
9 | camera {
location <0,1.5,-3>
look_at <0,1,0>
}
light_source {
<5,4,-3>
rgb <1,1,1>
}
|
Je ne détaille plus : à ce niveau, vous devriez comprendre.
Partie 2 : le corps
Maintenant, le corps.
On veut un cylindre de diamètre 0.4, donc de rayon 0.2, et de hauteur 2 ; ainsi qu'une sphère de même rayon située au sommet...
Code : C 1
2
3
4
5
6
7
8
9
10 | cylinder {
<0,0,0>
<0,2,0>
0.2
}
sphere {
<0,2,0>
0.2
}
|
Il ne reste plus qu'à ajouter les couleurs... Pour ça, je vous laisse choisir

.
Partie 3 : les deux anneaux
C'est tout pour le corps. Attaquons-nous maintenant aux deux anneaux... Et voyons un schéma pour plus de clarté :

Le texte en blanc est ce que nous savons déjà, celui en rose-violet ce que l'on peut déduire facilement.
Et le tour est joué ! Le premier anneau a un r1 de 0.3 et un r2 de 0.1 ; le second a un r1 de 0.45 et un r2 de 0.05. Voilà donc le code pour ces deux anneaux :
Code : C 1
2
3
4
5
6
7
8
9
10
11 | torus {
0.3
0.1
pigment { rgb <1,0,0> }
}
torus {
0.45
0.05
pigment { rgb <1,0.3,0.3> }
}
|
J'ai choisi des couleurs aléatoirement, vous pouvez les changer si vous le souhaitez...
Partie 4 : l'étage de la boule
Bon, une grosse boule à la hauteur 1.5 et de 0.35 de rayon, c'est pas compliqué. Les deux cylindres, un peu plus, voilà un petit schéma, vu du dessus :

Les traits blancs représentent les axes x et z, la coupe est à la hauteur y = 1.5.
Comme on le voit, un cylindre va de <-1,1.5,-1> à <1,1.5,1> et l'autre va de <-1,1.5,1> à <1,1.5,-1>. La largeur est de 0.1, on a tout ce qu'il nous faut !
Il suffit ensuite d'ajouter une sphère à chaque extrémité, et voilà ce que ça donne :
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 | sphere {
<0,1.5,0>
0.35
pigment { rgb <0.3,0.7,0.2> }
}
cylinder {
<-1,1.5,-1>
<1,1.5,1>
0.1
pigment { rgb <0.6,0.6,0.3> }
}
cylinder {
<1,1.5,-1>
<-1,1.5,1>
0.1
pigment { rgb <0.6,0.6,0.3> }
}
sphere {
<1,1.5,1>
0.15
pigment { rgb <0.7,0.7,0.5> }
}
sphere {
<1,1.5,-1>
0.15
pigment { rgb <0.7,0.7,0.5> }
}
sphere {
<-1,1.5,1>
0.15
pigment { rgb <0.7,0.7,0.5> }
}
sphere {
<-1,1.5,-1>
0.15
pigment { rgb <0.7,0.7,0.5> }
}
|
Les couleurs ne sont pas très belles, libre à vous de les changer

!
Partie 5 : l'étage des frites
Ça avance, on y est presque !
L'étage en question est d'abord composé de deux cônes et d'un cylindre.
Le premier cône part de y = 0.5 et a une hauteur de 0.2 ; les rayons sont de 0.2 puis de 0.3. Le second part de y = 0.9, a une hauteur de 0.2 et a pour rayons 0.3 et 0.2.
Le code sort tout seul :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | cone {
<0,0.5,0>
0.2
<0,0.5+0.2,0>
0.3
pigment { rgb <0.1,0.9,0.4> }
}
cone {
<0,0.9,0>
0.3
<0,0.9+0.2,0>
0.2
pigment { rgb <0.1,0.9,0.4> }
}
|
Pour placer le cylindre entre les deux, il suffit de réfléchir un peu : le rayon sera de 0.3 pour aller dans la continuité des deux cônes. Et pour combler parfaitement le vide, il faudra qu'il aille de 0.5 + 0.2 = 0.7 jusqu'à 0.9. Et c'est tout !
Code : C1
2
3
4
5
6 | cylinder {
<0,0.7,0>
<0,0.9,0>
0.3
pigment { rgb <0.4,0.95,0.6> }
}
|
Ne restent plus que les deux "frites" : un simple schéma permet de comprendre immédiatement comment faire :

Bon, ce n'est pas super clair, mais on voit à peu près les coordonnées.
Voici donc le code :
Code : C 1
2
3
4
5
6
7
8
9
10
11 | box {
<-0.05,0.75,-0.6>
<0.05,0.85,0.6>
pigment { rgb <0.7,0.98,0.75> }
}
box {
<0.6,0.75,-0.05>
<-0.6,0.85,0.05>
pigment { rgb <0.7,0.98,0.75> }
}
|
Et c'est fini ! La tour est prête, essayez et vous verrez !
On peut lui ajouter un sol, ce qui n'est vraiment pas dur :
Code : C1
2
3
4
5 | plane {
y
0
pigment { rgb <1,1,1> }
}
|