Joel Shaffer's Marching Cubes
Marching Cube Algorithm Overview
- Read in all the data such that for any given point (x, y, z) there is an associated value
- Iterate over each point and construct a cube
- For the cube at each point check if the associated value is less than the specified ISO value
- If the value is less than the ISO, the cube intersects the surface at that point and a bit mask should be set for the specified vertex
- Now that each vertex is determined as either inside or outside the surface, determine where along the edges the surface intersects
- Edge intersections are determined using a linear interpolation between the points, utilizing the associated data and the ISO level
- Using the triangle table and the vertex bit mask set the coordinates for a triangle
- Calculate a surface normal for each triangle
- Once all triangle data has been determined, send the data to the vertext and fragment shaders for rasterization
My Code
- Aggregate data from 100+ image files into a single data source
- Create a 3D array representing the data
- Perform marching cubes algorithm to determine triangles
- Calculate surface normals for each triangle
- Send triangles and normal data to vertex/fragment shader (Gourad)
- Use keyboard commands (WASD) and mouse (rotation) to move around the model
Triangle / Cube Intersections
![](triangle tables.png)
Souce: William E. Lorensen - MARCHING CUBES: A HIGH RESOLUTION 3D SURFACE CONSTRUCTION ALGORITHM
Original Stanford Images
![](stanford original.png)
Source: Stanford Volume Data Archive
Examples of my volume visualizations
![](CT regular iso 20.png)
ISO 20 Surface Normals - 6,851,966 Triangles
![](CT full normals iso 20.png)
ISO 20 Vertex Normals- 6,851,966 Triangles
![](ct regular iso 80.png)
ISO 80 - 2,617,506 Triangles
![](CT iso 100.png)
ISO 100 - 2,103,652 Triangles
![](sphere slices.png)
Side view of sphere slices
![](Entire Sphere.png)
Entire Sphere - 23480 Triangles
![](Sphere zoomed in.png)
Zoomed in Sphere
![](Sphere really zoomed in.png)
Individual triangles on Sphere
![](Many Sphere.png)
Multiple spheres of varying data quality
![](Curved ladder.png)
Curved ladder / planks
References
- Paul Bourke - Polygonising a scalar field - Triangle and Edge tables used from this source - here
- William E. Lorensen - MARCHING CUBES: A HIGH RESOLUTION 3D SURFACE CONSTRUCTION ALGORITHM - here
- Ostfold University College - Marching Cubes - here
- Stanford University Volume Data Archive - CTHead data and MRbrain data - here