16 个稳定版本
1.3.0 | 2024年4月14日 |
---|---|
1.2.11 | 2024年3月24日 |
1.2.9 | 2023年5月11日 |
1.2.8 | 2023年4月28日 |
0.0.1 | 2023年1月7日 |
#1076 in 解析实现
在 gvox-rs 中使用
315KB
6.5K SLoC
gvox-rs
为 GVOX 体素数据库提供的 Rust 高级、安全的 API
此库在 GVOX C API 上提供了一个符合 Rust 习惯的抽象。它提供了类型安全、内存安全和线程安全,且与 C 库的设计没有重大偏差。有关 API 设计的更多信息,请参阅GVOX Wiki。
以下是一个简单示例,演示了如何创建适配器上下文,并利用它们将 .gvox
文件转换为彩色控制台输出。有关其他示例,请参阅 src/tests.rs
中的测试。
const BYTES: &[u8] = include_bytes!("palette.gvox");
let mut o_buffer = Box::default();
{
let gvox_ctx = gvox_rs::Context::new();
let o_config = gvox_rs::adapters::ByteBufferOutputAdapterConfig::from(&mut o_buffer);
let s_config = gvox_rs::adapters::ColoredTextSerializeAdapterConfig {
downscale_factor: 1,
downscale_mode: gvox_rs::adapters::ColoredTextSerializeAdapterDownscaleMode::Nearest,
non_color_max_value: 5,
};
let mut i_ctx = gvox_ctx.get_adapter::<gvox_rs::Input, gvox_rs::adapters::ByteBuffer>()
.expect("Failed to get byte buffer input adapter.").create_adapter_context(BYTES)
.expect("Failed to create adapter context.");
let mut o_ctx = gvox_ctx.get_adapter::<gvox_rs::Output, gvox_rs::adapters::ByteBuffer>()
.expect("Failed to get byte buffer input adapter.").create_adapter_context(o_config)
.expect("Failed to create adapter context.");
let mut p_ctx = gvox_ctx.get_adapter::<gvox_rs::Parse, gvox_rs::adapters::GvoxPalette>()
.expect("Failed to get byte buffer input adapter.").create_adapter_context(())
.expect("Failed to create adapter context.");
let mut s_ctx = gvox_ctx.get_adapter::<gvox_rs::Serialize, gvox_rs::adapters::ColoredText>()
.expect("Failed to get byte buffer input adapter.").create_adapter_context(s_config)
.expect("Failed to create adapter context.");
let region = gvox_rs::RegionRange {
offset: gvox_rs::Offset3D {
x: -4,
y: -4,
z: -4,
},
extent: gvox_rs::Extent3D { x: 8, y: 8, z: 8 },
};
gvox_rs::blit_region(
&mut i_ctx,
&mut o_ctx,
&mut p_ctx,
&mut s_ctx,
®ion,
gvox_rs::ChannelId::COLOR | gvox_rs::ChannelId::NORMAL | gvox_rs::ChannelId::MATERIAL_ID,
).expect("Error while translating.");
}
assert_eq!(22228, o_buffer.len(), "Buffer output length did not match expected.");
println!("{}", std::str::from_utf8(&o_buffer).expect("Bad string slice."));
构建
目前,您必须安装以下内容才能构建此存储库。
- C++ 编译器
- CMake (3.21 或更高版本)
- Ninja 构建
- vcpkg (以及 VCPKG_ROOT 环境变量)
- 最新的 WASI_SDK(如果您正在为 WASM 构建)这些是必需的,因为 gvox-rs 库是基于 gvox-sys 库(子目录)构建的,该库通过 bindgen 生成,以创建 Gvox C API 的语言绑定。有关更多信息,请参阅 Gvox README!
无运行时依赖
~0–0.9MB