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 中使用

MIT 许可证

315KB
6.5K SLoC

C++ 4.5K SLoC // 0.0% comments Rust 1.5K SLoC // 0.0% comments C 470 SLoC // 0.0% comments

gvox-rs

为 GVOX 体素数据库提供的 Rust 高级、安全的 API

Crates.io Docs.rs

此库在 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,
        &region,
        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