5个版本

0.1.0-alpha.02021年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

Download history 43/week @ 2024-03-13 58/week @ 2024-03-20 47/week @ 2024-03-27 52/week @ 2024-04-03 119/week @ 2024-04-10 161/week @ 2024-04-17 213/week @ 2024-04-24 15/week @ 2024-05-01 8/week @ 2024-05-08 117/week @ 2024-05-15 376/week @ 2024-05-22 242/week @ 2024-05-29 113/week @ 2024-06-05 56/week @ 2024-06-12 96/week @ 2024-06-19 74/week @ 2024-06-26

372 每月下载量

Apache-2.0

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的编译时间。然而,示例程序确实依赖于gliumglium_text_rusttypecgmath库,以避免重新发明轮子。

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

无运行时依赖