IJK: Isosurface Jeneration Kode
IJK is a set of C++ classes, routines and programs for generating
isosurface. It includes programs for generating isosurface lookup
tables for arbitrary convex polyhedra in arbitrary dimensions. It
contains an implementation of the Marching Cubes Algorithm, the 4D
Marching Cubes Algorithm, the Marching Cubes Algorithm using negative,
equals and positive lookup tables, SnapMC which produces quality
isosurface triangles, SHREC for constructing isosurfaces with
sharp features using dual contouring and Religrad for computing
reliable gradients from scalar data. It also contains programs
scalar data set information, for
generating regular grid samplings of scalar and gradient fields, for
measuring the angle distance between two surfaces, and for finding
sharp edges in a mesh.
in higher dimensions" by Bhaniramka, Wenger and Crawfis, IEEE Visualization
Conference 2000, IEEE Computer Society Press;
construction in any dimension using convex hulls'' by Bhaniramka, Wenger
and Crawfis, IEEE Trans. on Vis. and Computer Graphics, 10, 2004;
isosurface mesh generation using an extended Marching Cubes lookup table"
by Raman and Wenger, Eurographics/IEEE Symposium on Visualization, 2008.
- "On the fractal dimension of isosurfaces" by Khoury and Wenger, IEEE Visualization Conference 2010, IEEE Computer Society Press.
- "Constructing isosurfaces with sharp edges and corners using cube
merging", by Bhattacharya and Wenger, Computer Graphics Forum, 32, 2013, 11-20.
- "Computing reliable gradients from scalar data - Technical report", by Bhattacharya and Wenger, OSU-CISRC-6/15-TR11.
Downloadable ijk software/tables:
Old versions of the software, isosurface tables and documentation.
- ijktable.v0.3.0.tar: Source code
and documentation for isosurface table generation including isotable C++ classes
and program ijkgentable. Includes
K. Clarkson's program hull for generating convex hulls.
Sample cube, simplex and simplicial prism isosurface tables in various dimensions.
Simplex vertices are ordered using program orientisotable so that adjacent simplices
have matching orientation.
- ijkorient.v0.2.5.tar: Source code
for reordering vertices of isosurface simplices in an isosurface table so
that adjacent simplices have matching orientation. For convenience,
this tar file contains duplicates of the files ijktable.cxx and ijktable.h.
Requires CGAL library.
- ijkmcube-v0-3-3.tar: Source code
for 2D/3D/4D Marching Cubes algorithm. Requires ITKNrrdIO.a library.
- ijkslice.v0.3.0.tar: Source code to slice
a set of d-simplices in (d+1)-space with a hyperplane and triangulate the
Source for reporting information about scalar data sets, including
scalar frequencies, isosurface area, volumes of interval volumes, mean
and total gradient and edge/box counting fractal dimensions. Requires
- ijkgenscalar.v0.2.0.tar: Source code for generating scalar and gradient fields. Requires ITKNrrdIO.a library.
- NrrdIO-1.11.0-src.tar.gz: Source code NrrdIO.
NrrdIO is a subset of the teem library. (See teem.sourceforge.net/nrrd.)
This is an exact copy of NrrdIO-1.11.0-src.tar.gz from the teem library.
Downloadable isosurface sharp feature reconstruction software:
- shrec.v0.1.0.tar: Source
code for SHREC (SHarp REConstruction). SHREC is a dual contouring
program to construct isosurfaces with sharp features. The program
identifies grid cubes containing sharp features and merges some of
those grid cubes in order to accurately represent the features.
Use program ijkgenscalar to generate regular grids sampling scalar and
gradient fields whose isosurfaces have sharp edges. Supersedes MergeSharp.
- religrad.v0.1.0.tar: Source code for Religrad. Program for computing reliable gradients from scalar data.
(deprecated) Source code for MergeSharp. MergeSharp has been superseded
by SHREC. It is included here only for testing and comparison
Compute the angle distance between two surfaces. Also, compute
the number or total area of triangles in a surface whose normals differ
more than X from the normals of the other surface.
Find "sharp" edges in a mesh and to a file in geomview .line
format. Edges with dihedral angle below a threshold are
- countdegree.v0.1.0.tar: Count number of vertices with
degrees 1, 2, 3 or greater than 3, in graph specified by line
segments. Usually, applied to the output of findsharp to count
the number of vertices with various degrees in a 1-skeleton of the
sharp edges of a mesh.
- EMCpoly.v0.1.0.tar: Sample
Extended Marching Cubes algorithm to construct isosurfaces with sharp
features. Modification of program EMC (IsoEx) from www.graphics.rwth-aachen.de/IsoEx to generate isosurfaces of cubes, annuli and flanges.
- Isosurface table generation:
- ijkgentable (html): Program
for generating isosurface tables of hypercubes and simplices.
- ijktableinfo (html): Program
for reporting some information about an isosurface table.
- ijkdifftable (html): Program
for reporting differences between isosurface tables.
- ijkorient (html): Program
for reordering simplex vertices in an isosurface table so that adjacent
simplices have matching orientations.
- ijktable (html): C++ classes
for representing isosurface tables of convex polyhedra in arbitrary dimensions.
- ijkgenpatch (html): Routine
for generating an isosurface in a convex polyhedron in arbitrary dimensions.
- XML Isosurface Table:
- xit (html): File format for
storing isosurface tables of convex polyhedra in arbitrary dimensions.
- Isosurface generation:
- ijkmcube (html): Marching
cubes algorithm and variants (including 4D, use of negative-equals-positive
lookup tables and SnapMC for quality mesh generation.)
- Scalar data set information:
- ijkscalarinfo (html): Program for reporting information about a scalar data set, including fractal edge and box counting dimensions.
- Change log: CHANGES.
Time varying volumetric data can be visualized by treating time as the
fourth dimension and building a three-dimensional isosurface in
The isosurface can be sliced along the time axis to construct a
animation or it can be sliced along other axes to visualize how subsets
of the data vary in time. For 10 time steps of the Jet ShockWave
data set, an isovalue of 37 generated an isosurface with 8,021,739
and 1,394,104 vertices in 1109 seconds on an SGI Octane. The
intersected 1,317,975 hypercubes, giving an average of around 6
per hypercube. The total number of triangles generated for the
10 time steps by Marching Cubes was 1,796,350.
Slice along X-axis
Slice along Y-axis
Slice along Z-axis
Slices of time-varying isosurface for the Jet Shockwave data set
Isovalue = 37, Timesteps = 56-65.
An isosurface in 3D can be morphed into another isosurface in 3D by
an appropriate isosurface in 4D. Let f1(x,y,z) =
0 and f2(x,y,z) = 0 define two isosurfaces, S1
and S2, respectively. Define F(x,y,z,t) = f1(x,y,z)(1-t)
+ f2(x,y,z)t. Note that F(x,y,z,0) = f1(x,y,z)
and F(x,y,z,1) = f2(x,y,z). Sample F
a four dimensional grid G(x,y,z,t) whose last value t is
either 0 or 1. Build an isosurface from the grid G and
for various values of t to get a time-varying animation of the
from S1 to S2.
Morphing using isosurfaces in 4D.
interval volume is the set of points lying between two
Three dimensional interval volumes can be constructed using a four
isosurface. Let f(x,y,z) = a1
define two isosurfaces, S1
respectively. Define F(x,y,z,w) = (f(x,y,z) - a1)(1-w)
+ (f(x,y,z) - a2)w
. Note that the isosurface F(x,y,z,0)
and the isosurface F(x,y,z,1)
. Sample F
along a four
whose last value w
is either 0 or 1.
the isosurface with isovalue 0 from the grid G
and project the
into the plane w
= 0 to form the interval volume S1
Interval volume for the sphere function constructed using 4D
A surface given by the equation F(x1, x2,
= 0 can be visualized by evaluating F
vertices of a d
-dimensional grid, building an isosurface from
grid, and then slicing the isosurface by three-dimensional subspaces.
Slices of the function F(x,y,z,w) = x2+y2+z2-w
along different coordinate axes.
Slice along W-axis
Slice along X-axis
Last updated by Dr. Rephael Wenger, Feb. 4, 2019