5个版本
0.1.0-alpha.0 | 2021年1月29日 |
---|---|
0.0.4 | 2018年3月20日 |
0.0.3 | 2017年11月11日 |
0.0.2 | 2017年11月7日 |
0.0.1 | 2017年10月29日 |
#157 in 图形API
372 每月下载量
190KB
3.5K SLoC
等值面
在Rust中实现的等值面提取算法。包括经典的Marching Cubes和Dual Contouring技术,以及该主题的更多现代变体。
为了教育目的,每个提取算法的文档链接到相关的学术论文。
示例程序
cargo run --example sampler
将执行采样器,允许您比较各种算法和隐式表面。
cargo run --example deferred_rasterisation
将执行从点云进行的GPU端延迟光栅化的演示。这是由Voxel Quest的Gavan Woolery开创的技术。
依赖项
这个库故意没有依赖项。虽然这需要一些常见代码的重开发(即Vec3类型),但它保持了库的小型尺寸,并降低了消费Crates的编译时间。然而,示例程序确实依赖于glium
、glium_text_rusttype
和cgmath
库,以避免重新发明轮子。
32位索引
为了简单起见,顶点索引已固定为32位,因为对于32x32x32及以上的块,您通常会得到超过65k个顶点。如果您针对仅支持16位索引的移动平台,则需要保持较小的块大小,或者在输出端分割网格。
为什么调试构建中启用了优化?
如果没有启用优化,调试构建大约慢70倍。实现依赖于大量的整数范围嵌套for循环,而范围迭代器本身在非优化构建中完全支配CPU分析。
虽然可以通过将 for 0..8
风格的循环转换为手动计数器的 while 循环来解决这个问题,但结果并不令人愉快,并且与 Rust 的精神明显不符。我更愿意保持优化启用,并等待编译器在调试构建中更好地处理迭代器。
如果您依赖这个crate并遇到相同的问题,可以通过在您的 Cargo.toml
中添加以下内容来告诉 Cargo 仅在此crate中编译发布模式:
[profile.dev.package.isosurface]
opt-level = 3