Skip to content
Isosurface extraction from regular voxel grids
C++ C Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
Src no message Jul 13, 2017
.gitignore Manifold Output Nov 3, 2015
IsoSurfaceExtraction.jpg Code Commit Nov 1, 2015
IsoSurfaceExtraction.sln Code Commit Nov 1, 2015
IsoSurfaceExtraction.v12.suo Manifold Output Nov 3, 2015
IsoSurfaceExtraction.vcxproj Code Commit Nov 1, 2015
IsoSurfaceExtraction.vcxproj.filters Code Commit Nov 1, 2015
Makefile Modified Makefile Nov 2, 2015 Byte flipping variable renamed Aug 24, 2016
license.txt Added license Aug 7, 2016

Accurate Isosurface Interpolation with Hermite Data

links description executable
3DV 2015 Paper
Windows Executable (x64)
Source Code


    --in <input volume>
    This string is the name of the file containing the regularly sampled voxeld values. Values are linearized, so that if the image is of resolution ResX*ResY*ResY then the value at index (x,y,z) is at position x+y*ResX+z*ResX*ResY, and are stored in binary format either as unsigned chars (1 byte per value) or as floating point values (4 bytes per value).
    --res <x-resolution y-resolution z-resolution>
    This triplet of integer values gives the resolution of the voxel grid.
    [--dim <x-scale y-scale z-scale>]
    This (white-space separated) triplet of floating point values gives the scale of a voxel. (By default, the values are set to 1.)
    [--out <output mesh>]
    This string is the name of the file to which the extracted isosurface will be written. The mesh will be written in the PLY format.
    [--iso <isovalue>]
    This floating point value specifies the isovalue at which the isosurface is to be extracted. (By default, the value is set to 0.)
    [--sIters <smoothing iterations>]
    This integer specified the number of (1-ring) smoothing iterations that are to be applied to the voxel grid before extracting the isosurface. (By default, the value is set to 0.)
    If specified, the Marching-Cubes algorithm is implemented using a ``full'' case table, using the average value of face corners to resolve the amiguous case when the face is zero-crossing and the values on antipodal corners are the same.
    If specified, the triangle orientation in the output is flipped.
    If specified, Hermite data is generated (by considering the difference between neighboring values) and a second-order interpolant is used to define the positions of zero-crossings.
    If specified, the raw iso-polygons are output. Otherwise, the polygons are triangulated using a minimal-area-triangulation and a triangle mesh is written as output.
    If specified, the input is read in as a list of floating point values. Otherwise, the input is assumed to represent (unsigned) char values.
    If specified and floating point values are used, the bytes within each float will be flipped.
    Although the polygon mesh resulting from Marching-Cubes is manifold, it can be the case that two polygon share two vertices that are not on a polygon edge. As a result, the minimal area triangulation could introduce the same edge for the triangulation of both polygons, resulting in a triangle mesh with non-manifold edges. By default, the code will introduce an additional vertex (the plane's barycenter) if a non-manifold triangulation can arise, thereby ensuring that the output triangle mesh is manifold. Enabling this flag avoids introducing the barycenter, but could result in mesh with non-manifold edges.

You can’t perform that action at this time.