11 个版本 (6 个破坏性更新)
0.7.1 | 2021 年 9 月 23 日 |
---|---|
0.7.0 | 2021 年 6 月 14 日 |
0.6.0 | 2021 年 3 月 21 日 |
0.5.0 | 2021 年 2 月 8 日 |
0.1.0 | 2020 年 10 月 26 日 |
178 在 图形 API 中
83 每月下载量
410KB
9K SLoC
building-blocks
Building Blocks 是一个用于实时应用的体素库。
我们专注于通用数据结构和算法。功能包括
- 2D 和 3D 数据存储
- 网格生成
- Surface Nets 等距面提取
- 类似 Minecraft 的贪婪网格化
- 高度图
- 空间查询
- 在八叉树中进行稀疏遍历和搜索
- 使用
ncollide3d
对八叉树进行光线投射和球投射 - Amanatides 和 Woo 光线网格遍历
- 路径查找
- 细节级别
ChunkMap
可以将块下采样到同一存储中的较低分辨率- 动态 3D 裁剪图,以保持焦点附近的高细节
- 多分辨率 Surface Nets (待办事项)
- 过程生成
- 采样有符号距离场
- 使用
sdfu
构造实体几何
简短代码示例
以下代码采样 有符号距离场 并从中生成网格。
use building_blocks::{
core::sdfu::{Sphere, SDF},
prelude::*,
mesh::{SurfaceNetsBuffer, surface_nets},
};
let center = Point3f::fill(25.0);
let radius = 10.0;
let sphere_sdf = Sphere::new(radius).translate(center);
let extent = Extent3i::from_min_and_shape(Point3i::ZERO, Point3i::fill(50));
let mut samples = Array3x1::fill_with(extent, |p| sphere_sdf.dist(Point3f::from(p)));
let mut mesh_buffer = SurfaceNetsBuffer::default();
let voxel_size = 2.0; // length of the edge of a voxel
surface_nets(&samples, samples.extent(), voxel_size, &mut mesh_buffer);
学习
设计和架构
有一个简短的设计文档,概述了关于当前架构所做的设计决策。您可能会发现这是一份关于最重要代码的高层次总结。
文档和示例
了解这个库的最好方法是阅读文档和示例。要查看最新稳定版本的文档,请访问这里。对于最新不稳定版本的文档,请克隆存储库并运行
cargo doc --open
这里有很多带示例的文档。查看examples/
目录,了解Building Blocks如何在实际应用中使用。
入门指南
这个库被组织成几个crate。其中最基本的包括
然后您可以从其他crate中获得更多功能
要了解格点映射的基本知识,请从这些文档页面开始
基准测试
要运行基准测试(使用“criterion”crate),请转到crate的根目录并运行cargo bench
。截至版本0.5.0,所有基准测试结果都发布在发布说明中。
配置
LTO
强烈建议在使用building-blocks时启用链接时优化。它可以提高如网格生成等关键算法的性能,最高可达2倍。只需将以下内容添加到您的Cargo.toml文件中即可
[profile.release]
lto = true
Cargo功能
Building Blocks被组织成几个crate,其中一些crate隐藏在功能之后,一些crate本身具有功能,这些功能由顶级crate重新导出。一些功能默认启用。您可以在Cargo.toml中声明default-features = false
来避免不必要的依赖。
[dependencies.building-blocks]
version = "0.6"
default-features = false
features = ["foo", "bar"]
数学类型转换
通过启用相应的功能,PointN
类型可以将转换到/从glam
、nalgebra
和mint
类型。
压缩后端和WASM
块压缩支持两个内置后端:Lz4
和Snappy
。它们通过启用“lz4”和“snappy”功能来启用。“lz4”是默认值,但它依赖于C++库,因此与WASM不兼容。但Snappy是纯Rust,所以它可以!只需将“snappy”添加到您的features
列表中即可。
VOX文件
通过dot_vox
crate支持".VOX"文件。启用dot_vox
功能以暴露通用的encode_vox
函数和Array3x1::decode_vox
构造函数。
图像
数组可以被转换为 ImageBuffer
并从 image
包中的 GenericImageView
构建而来。启用 image
功能可以暴露泛型的 encode_image
函数和 From<Im> where Im: GenericImageView
实现。
有符号距离场实用工具(sdfu)
sdfu
包提供了方便的 API 用于构造实体几何操作。通过启用此功能,PointN
类型将实现 sdfu::mathtypes
特性,以便与这些 API 一起使用。此外,sdfu
包也将在 building_blocks::core::sdfu
下导出。
开发
我们根据 项目板 优先考虑工作。
许可证:MIT
依赖项
~2.3–7MB
~116K SLoC