| |
Comme son nom l'indique, le générateur de terrain permet de griller le pain. Non, je plaisante. Le but de ce projet était d'appliquer la triangulation de Delaunay à un ensemble de points de l'espace dont la hauteur est définie par rapport à un plan fixe afin de construire le terrain correspondant. (Le titre initial était "terrain mapping" mais pouvait induire en erreur les fanatiques de texture mapping; "terrain builder" me semble plus approprié). La réalisation s'est essentiellement déroulée en Java, VRML n'intervenant pour sa part qu'au moment de l'affichage. À ce sujet notons qu'il est actuellement impossible de faire tourner la chose sur cette page vu l'incapacité (pour le moment ?) de Netscape a l'interpréter.
|
|
| |
Pour générer le terrain nous nous basons sur un plan dont les dimensions ont arbitrairement été fixées à 400x200 et d'un certain nombre de points (50 dans le cas présent mais aisément modifiable (*) dont les coordonnées ont été tirées au hasard (mais de façon à rester au-dessus du plan tout de même). Le terrain proprement dit sera construit au moyen de triangles reliant chacun des points. La difficulté, on s'en doute, naît donc de la façon dont on va relier ces points pour dessiner les triangles; c'est ici qu'intervient l'algorithme de Delaunay. (*):cela nécessite quand même outre une modification du source Java d'adapter le fichier VRML pour que le nombre de facettes à construire corresponde.
|
|
| |
L'algorithme de Delaunay est la pièce essentielle du programme Java puisqu'il choisit le meilleure construction de triangle possible à partir de l'ensemble de points qu'il reçoit. Par meilleure construction possible j'entends un dessin plus "clair" des triangles en éliminant les faces contenant des angles trop petits. Un petit dessin valant mieux qu'un long discours, vous trouverez une applet de démonstration ainsi que de nombreux autres renseignements ici. Techniquement, l'"implantation" (ce mot est laid certes mais implémentation n'est toujours pas français) a été réalisée à partir de l'applet Java sus-citée, grâce soit donc rendue à:
Nous pouvons néanmoins l'utiliser pour générer des triangles "intéressants" en simulant une 2D provisoire par projection des points sur le plan. Ici ce dernier étant xy, il suffit de se débarrasser de la coordonnée z pour ensuite passer un à un nos points "randomisés" à l'algorithme en partant du plus haut pour finir par le plus bas.
|
|
| |
VRML intervient dans la partie visible (et finale) du projet: le rendu. Pour visualiser l'agencement des triangles générés il a été nécessaire d'utiliser un objet au doux nom d'Indexed Face Set dont les champs principaux contiennent une liste de tous les points utilisés et un index décrivant la façon dont ils sont reliés entre-eux. Ici ce dernier champ est fixé et c'est la liste qui est crée par le programme Java et transmise par le biais d'un noeud Script (tout comme la couleur).
|
|
| |
Oui hein ? L'essentiel a été dit, pour juger sur pièces il vous est maintenant proposé de télécharger l'archive complète (sources + cette page): projet.tar.gz (181Ko) Pour faire tourner le projet il vous faudra charger le .wrl dans le viewer de Liquid Reality qui lui-même se lance avec appletviewer (attention à votre CLASSPATH ! Si vous êtes à l'ESSI, jetez un oeil ici avant).
|
|
| |
Pour le projet oui, mais plusieurs extensions sont possibles, en voici quelques unes:
|