Hanoï en 3D 265
Chapitre 19
Chaque ligne commençant par un
v
représente les coordonnées d’un point. Chaque ligne commen-
çant par
vn
représente une normale, avec ses coordonnées. Enfin, chaque ligne commençant par
f
est
la description d’une face, en donnant la liste des points qui la constituent, à chaque point étant asso-
ciée une normale. C’est cette association qui donne naissance au vertex. Dans l’exemple précédent,
la première face est un triangle (car il y a trois vertices), son premier point est le point d’indice 140
dans la liste des
v
, auquel est associé la normale d’indice 1 dans la liste des
vn
.
Pour être juste, le format OBJ est capable de bien plus que cela, mais c’est tout ce dont nous avons
besoin. Si vous utilisez Blender, obtenir un tel fichier se fait en passant par le menu File > Export >
Wavefront, puis en n’activant que les options Selection only (pour n’exporter que l’objet sélectionné),
Normals (pour avoir les normales) et Triangulate, et aucune autre. La dernière est particulièrement
importante pour que les faces ne soient bien que des triangles, pas des quadrilatères ou autre polygone.
D’autres logiciels devraient proposer des options similaires lors d’un enregistrement au format OBJ.
19.2. Préparation du programme
Après tous ces prolégomènes, revenons à la programmation. Nous allons repartir de l’état dans
lequel nous avons laissé le programme au Chapitre 17, pour tout simplement lui ajouter une possibi-
lité de représentation, en plus du mode texte (section 11.3.1), de l’image (Chapitre 13) et de la scène
“plate” (le canevas, Chapitre 14). Cette nouvelle capacité sera stockée dans une bibliothèque
nommée
3d
et donnera un résultat illustré par la Figure 19.4.
Figure 19.4
Hanoï en 3D !
Comme il faut bien se donner une référence quelque part, nous posons les termes suivants :
L’origine, le point de coordonnées (0, 0, 0), correspond exactement à la base de l’aiguille du milieu.
Les aiguilles s’étendent le long de l’axe Z ; donc, sur l’image cet axe va vers le haut.
La longueur du plateau s’étend le long de l’axe X ; donc, sur l’image il va vers la droite en montant.
Et, par conséquent, la largeur du plateau s’étend le long de l’axe Y, qui semble donc s’éloigner de
nous vers le haut à gauche.
Book_Prog_initia.indb 265 03/02/11 15:52
© 2011 Pearson France – Initiation à la programmation avec Python et C++ – Yves Bailly