Marching tetrahedra

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Cette méthode est destinée à représenter la surface définie par \{(x,y,z) \in \mathbb{R}^3 , f(x,y,z)=0\}, 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.

Décomposition d'un cube en 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 :

Décomposition d'un cube en tétraèdres

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[modifier | modifier le code]

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.
Sommets positifs et négatifs d'un cube

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[modifier | modifier le code]