3个版本
0.1.2 | 2023年1月30日 |
---|---|
0.1.1 | 2023年1月30日 |
0.1.0 | 2023年1月30日 |
#4 在 #voxels
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的体积,但在实际应用中,体积大小可以大得多,算法也会相应地进行扩展。