- Marching Tetrahedra
-
Marching tetrahedra
Introduction
Cette méthode est destinée à représenter la surface définie par , avec f une fonction définie sur l'espace. Le principe de base est identique au marching cubes.
On notera alors que le marching cubes est une technique ayant fait l’objet d’un copyright, alors que la technique du marching tetrahedra a été créé pour contourner ce brevet.
Une fois que l’on sait que l’on doit tracer l’isosurface sur le cube, on va décomposer ce cube en tétraèdres. On peut, par exemple décomposer le cube en 6 tétraèdres.
Sur chaque tétraèdre, on va construire l’isosurface. Comme on n’a plus que 4 points dans la structure considérée, on n’a que 16 cas à considérer, ce qui par parité, se réduit à 8 cas. Les différents cas sont exposés ici :
Chaque point de l’intersection entre l’isosurface et le tétraèdre est calculé par interpolation linéaire entre les 2 points du tétraèdre correspondant. Pour le reste, la méthode est la même que pour le Marching Cube.
Implémentation
Un tétraèdre est intégralement déterminé par les 4 points qui le composent. On peut implémenter la méthode du marching tetraedra de la manière suivante: on commence par créer une procédure PolygoniseTri. Cette procédure prend en paramètre (par exemple) :
- Une isovaleur
- Le numéro des 4 points du cube C qui compose le tétraèdre.
On commence par créer un nombre qui code les sommets positifs et négatifs : M Suivant ce nombre, on crée directement les triangles de l’isosurface, en même temps que l’on calcule les coordonnées des points. On notera qu’au maximum 2 triangles composent la surface sur un tétraèdre. Les données de sorties sont par exemple:
- Un nombre n_Tri qui indique le nombre de triangles créés (1 ou 2)
- Un tableau Tab_Tri de taille n_Tri qui contient les triangles sous forme d'une structure Triangle.
Pour un cube comme celui-ci, l’appel qui permet de créer l’isosurface sur tout le cube est :
- PolygoniseTri(isovaleur, 2,7,3,1);
- PolygoniseTri(isovaleur, 0,7,1,3);
- PolygoniseTri(isovaleur, 6,1,7,2);
- PolygoniseTri(isovaleur, 0,1,7,4);
- PolygoniseTri(isovaleur, 1,4,5,7);
- PolygoniseTri(isovaleur, 1,7,5,6);
Voir aussi
- Portail de l’informatique
Catégories : Imagerie numérique | Algorithme d'infographie
Wikimedia Foundation. 2010.