#marching #voxels #game #isosurface

marching-cubes

Rust语言实现的marching-cubes算法

3个版本

0.1.2 2023年1月30日
0.1.1 2023年1月30日
0.1.0 2023年1月30日

#4#voxels

MIT 许可证

34KB
517

marching-cubes

用于从3D体数据中提取等值面的marching-cubes算法的Rust实现。

特性

  • 快速且高效
  • 常用于计算机图形学、医学成像和科学可视化

示例

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);

使用方法

MarchingCubes 结构是库的主要入口点。

  • new 方法创建算法的新实例,并接受两个参数:作为嵌套数组标量值的3D体数据和用于提取等值面的等值。
  • polygonise 方法执行算法,并返回作为3D点向量的结果顶点。

注意:示例代码为了简单起见使用了4x4x4的体积,但在实际应用中,体积大小可以大得多,算法也会相应地进行扩展。

无运行时依赖

特性