Introduction au remaillage

Cette série de trois séances de TP sera consacrée à la construction d'un outil de du remaillage régulier de surfaces polyédrales.

Ce TP est noté. Je vous demande d'envoyer à l'adresse J-Marie.Favreau@uca.fr, au plus tard 21 jours après le dernier TP (soit le le 30 mars 2022, à discuter car ça tombe le jour du devoir surveillé), une archive contenant les différents programmes réalisés pendant ce TP, ainsi qu'un rapport (de 4 à 5 pages) décrivant vos réalisations et expérimentations, agrémenté de captures d'écran.

L'objectif de ce TP est d'explorer la problématique du remaillage régulier de surfaces polyédrales. Le présent document est structuré en trois parties, chacune correspondant au travail à réaliser pendant une séance de TP. Ce découpage est cependant arbitraire, n'hésitez pas à le dépasser suivant vos envies ou vitesse de progression.

TP 5 : implémentation d'un octree

Comme l'indique wikipédia, Un octree est une structure de données de type arbre dans laquelle chaque nœud peut compter jusqu'à huit enfants. Les octrees sont le plus souvent utilisés pour partitionner un espace tridimensionnel en le subdivisant récursivement en huit octants.

Il existe dans CGAL une implémentation des octree (AABB tree), qui permet de calculer rapidement des intersections et calculs de distance. L'interface telle qu'elle est proposée dans la documentation ne permet pas d'accéder explicitement à la structure de données interne. Or, dans le suite de ce TP, on aura besoin d'avoir accès aux sommets contenus dans chacune des feuilles de l'octree.

On se propose donc de développer notre propre structure de données permettant de distribuer les sommets d'un maillage dans un octree, afin de l'utiliser pour la simplification de maillages. Cette implémentation devra notamment permettre de :

On pourrait raconter l'algorithme de cette manière :

Remarques :

Plusieurs pistes d'aide à la réflexion :

TP 6 : visualisation d'un octree

Dans cette partie du TP, on se propose de fabriquer un fichier au format OFF, dont les formats sont colorés en fonction de leur nœud d'appartenance.

Le format OFF est un format très simple, au format ascii, dont on trouve la spécification standard en ligne. Ce format permet par défaut de stocker des coleurs sur les faces. Si l'on veut stocker les couleurs sur les sommets, il est nécessaire d'implémenter une variante. Dans ce cas, l'entête n'est plus "OFF" mais "COFF", et chaque ligne de sommet est décrite sous la forme «x y z r g b», où r, g et b sont des réels entre 0 et 255 décrivant la composante rouge, verte et bleue du sommet. Le fichier vertcube.off en donne un exemple.

Remarque : le plus simple est de fabriquer ce fichier à la volée, en utilisant un itérateur sur les sommets du maillages, puis un itérateur sur les faces du maillage, et en écrivant dans un fichier, à la manière du TP précédent.

Extension possible : une autre manière de visualiser la construction de l'octree est de générer un maillage qui contienne un pavé droit pour chacun des nœuds feuille non vide (correspondant à sa boîte englobante). On observera ainsi des petits cubes aux endroits où il y a beaucoup de détails géométriques, et de grands cubes là où il y en a peu.

TP 7 : simplification d'un maillage par octree

Maintenant que l'on dispose d'une structure de données octree, on a un moyen d'avoir une version simplifiée du maillage.

On fabrique un nouveau maillage de la manière suivante :

Décimation par octree

Remarques :

Sujets d'exploration :

Puisqu'on travaille sur l'implémentation d'un algorithme de simplification de maillages, son application sur des maillages avec peu de sommets n'est pas très intéressante (voire contre-productive). Privilégiez des maillages avec beaucoup de sommets...

Ressources

La méthode que vous avez implémentée est pertinente sur des maillages avec un grand nombre de sommets. En plus des maillages déjà proposés, voici quelques éléments supplémentaires qui pourraient vous être utiles :

Vous pouvez aussi fabriquer des maillages avec une configuration spécifique, pour illustrer une intuition que vous avez sur l'algorithme.

Un début de structure de classe discuté en cours : sur pastebin.