Skip to content
This repository has been archived by the owner on Jun 26, 2023. It is now read-only.

therealnv6/marching-cubes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

marching-cubes

A Rust implementation of the marching cubes algorithm for extracting isosurfaces from 3D volumetric data.

Features

  • Fast and efficient
  • Commonly used in computer graphics, medical imaging, and scientific visualization

Examples

use marching_cubes::{MarchingCubes, GridCell, Triangle};

let grid = GridCell {
    positions: [
        [0.0, 0.0, 0.0],
        [1.0, 0.0, 0.0],
        [1.0, 1.0, 0.0],
        [0.0, 1.0, 0.0],
        [0.0, 0.0, 1.0],
        [1.0, 0.0, 1.0],
        [1.0, 1.0, 1.0],
        [0.0, 1.0, 1.0]
    ],
    value: [0.0, 0.5, 0.5, 1.0, 0.0, 1.0, 1.0, 0.0],
};

let mut triangles = vec![];

let isolevel = 0.5;
let mc = MarchingCubes::new(isolevel, grid);
let triangle_count = mc.polygonise(&mut triangles);

assert_eq!(triangle_count, 4);

Usage

The MarchingCubes struct is the main entry point to the library.

  • The new method creates a new instance of the algorithm and takes two arguments: the 3D volumetric data as a nested array of scalar values and the isovalue used to extract the isosurface.
  • The polygonise method executes the algorithm and returns the resulting vertices as a vector of 3D points.

Note: The example code uses a 4x4x4 volume for simplicity, but in practice the volume size can be much larger and the algorithm will scale accordingly.

About

a simple marching cubes implementation, reimplemented in rust, taken from http://paulbourke.net/geometry/polygonise/

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages