This demonstration use an internal class that contains a simple implementation of the classic Marching Cubes algorithm that computes the geometry (triangles) of an isosurface from a VolumeViz data set. It returns an SoTriangleSet node with an attached SoVertexProperty node containing the vertices and normal vectors. The geometry can then be exported using the usual Open Inventor tools, for example SoSTLWriteAction will write an STL format file.
The classic Marching Cubes algorithm operates on each cell of the mesh independently (see marchCube() method). We process each "tile" of the VolumeViz data set independently (see marchTile() method). This allows efficient data access because the SoLDMDataAccess class can give us a read-only reference to one tile of the volume without copying any data.
This is great if the volume fits in one tile (recommended when possible for medical data sets). If not, we have to make another pass to compute the triangles between tiles.
To use this demonstration, first select an isosurface value in the left viewer (GPU rendering based SoVolumeIsosurface class) and then extract and visualize it in the right viewer (Geometry).
SoVolumeData, SoDataRange, SoTransferFunction, SoVolumeRenderingQuality, SoVolumeRender
GPU isosurface preview (volumeViz).
Isosurface extraction based on Marching Cubes.