Digital topology and isosurfaces

( J.-O. Lachaud , Annick Montanvert )

We have studied the links existing between two surface representations: the digital surface and the iso-surface (i.e., triangulated surfaces as generated by the marching cubes algorithm). We have shown that they are closely related under connectedness considerations. This assertion has been demonstrated to be true for arbitrary dimensions.

We give below several configuration tables which can be used by a Marching cubes-like algorithm to build isosurfaces with good properties (e.g. they are 2-manifolds). These tables depend on the connectedness (k,l) chosen for the object voxels and for the background voxels.

You may find the piece of code below useful to use these tables in a C/C++ program.
  /**
   * Voxels are numbered from 0 to 7 in a cube with eight voxels.
   * Its binary decomposition are the coordinates zyx.
   */
  typedef unsigned int voxel;

  /**
   * A vertex is between two voxels: a couple of two integer number 
   * between 0 and 7.
   */
  typedef voxel vertex[2];

  /**
   * A triangle is an array of three vertices.
   */
  typedef vertex triangle[3];

  /**
   * A local surface patch is made of at most six triangles.
   */
  typedef triangle piece_of_surface[6];

  /**
   * A configuration is made of a given number of triangles.
   */
  typedef struct general2
  {
    /**
     * The number of facets of this configuration.
     */
    int nb_triangles;
    /**
     * The facets of this configuration.
     */
    piece_of_surface tab_triangles;
  } tous_general2;


/**
 * Global array containing all configurations.
 */
static tous_general2 TABLE[256] =
  {  /* Choose your file here. */
#include "cas_k26_l6.h"
  };

Lachaud00a , Lachaud98a , Lachaud96b