Les polyèdres
Les polyèdres sont des formes géométriques en trois dimensions (des solides géométriques) ayant des faces planes polygonales qui se rencontrent selon des segments de droite qu'on appelle arêtes. Il existe une multitude de polyèdres convexes, non convexes, étoilés, symétriques, tronqués, etc. La littérature sur ce sujet est vaste.
Représenter des polygones avec POVRay n'a rien de compliqué. Par contre, calculer la position des points (vertex) et des arrêtes (edges) qui forme les polygones l'est beaucoup plus.
Par chance, David I. McCooey a fait un travail immense et a mis à disposition sur son site
Visual Polyhedra une quantité impressionnante de polyèdres avec les coordonnées des sommets et la définition des polygones format les faces.
La structure des données choisie par l'auteur n'étant pas directement compatible avec POVRay, un petit script en Perl va les transformer afin de pouvoir les utiliser dans notre logiciel de rendus favoris. Le script génère un fichier "include" qui contient toute la géométrie du polyèdre.
Une fois les données en bonne forme, un code SDL interprétera tout cela et générera une jolie image simplement. Ci-dessous quelques exemples :
Vous pouvez télécharger l'ensemble des fichiers nécessaires en cliquant sur le bouton ci-dessous. L'archive tgz contient un fichier "ReadMe.txt" qui explique comment se servir de tout ça et donne un exemple complet.
Quelques remarques:
- Le traitement des sommets et les arêtes est optimisé. Une macro s'occupe de supprimer les doublons. Le nombre d'arêtes est divisée par deux. Donc deux fois moins de cylinder{} à tracer.
- Vous verrez dans les sources que les "faces" sont conservées dans un tableau "texte". Chaque face (ligne du tableau) contient les références aux somments qui compose la face. Les points sont coplanaires. Chaque point est séparé par une virgule :
#declare faces[33] = "21,57,49,34";
La face numéro 33 est composée des 4 points 21, 57, 49 et 34. Ces valeurs sont les indices du tableau "vertex" :#declare vertex[indice] = <x, y, z>;
- Par défaut, la texture est appliqué à l'ensemble du mesh{}. Il est possible d'attribuer une couleur spécifique en fonction du nombre de cotés du polygone formant la face comme sur un des exemples ci-dessus. Toujours avec le même exemple, faces[33] contient 4 valeurs. On peut donc définir la texture pour un quadrilatère de cette manière :
#declare MeshTextures[4] = texture { ... } // la texture pour une quadrilatère
Cette fonctionnalité ne fait pas partie du framework téléchargeable mais ne présente pas de difficulté à mettre en place.
Vous pouvez bien sûr me contacter si vous rencontez des problèmes et/ou avez des questions.

Using stochastic antialiasing method based on an idea from Bald Eagle & Thomas de Groot.