3个版本 (重大更改)
0.3.0 | 2022年12月23日 |
---|---|
0.2.0 | 2022年8月7日 |
0.1.0 | 2022年8月7日 |
#1715 在 游戏开发
1.5MB
677 行
blend-rs
一个用于读取Blender的.blend文件,无需烦恼字节解析的Rust库。
注意:有关更多详细信息,请参阅文档。
描述
该库属于一组三个库,它们都与读取Blender的.blend文件的主题相关
-
blend-inspect-rs:一个用于解析和分析Blender的.blend文件的Rust库。
-
blend-bindgen-rs:一个用于生成Blender数据结构的Rust库。
-
blend-rs:一个用于从Blender的.blend文件中读取对象的Rust库。
贡献
欢迎所有贡献:想法、补丁、文档、错误报告、投诉。根据Apache-2.0许可证,您有意提交以包含在此crate中的任何贡献,将不受任何附加条款或条件的约束。
许可证
根据Apache许可证,版本2.0授权。
lib.rs
:
blender-rs
一个用于读取Blender的.blend文件,无需烦恼字节解析的Rust库。
注意:由于本库的功能,并非所有Blender版本都受支持。有关crate功能的表格列出了支持的Blender版本。
示例
以下示例说明了如何提取对象的网格的每个顶点的坐标。
use blend_rs::blend::{read, StructIter, PointerLike, NameLike};
use blend_rs::blend::traverse::Named;
use blend_rs::blender3_2::{Object, Mesh, MPoly, MVert, MLoop};
pub struct Vertex {
pub position: [f32; 3],
}
fn main() {
let blend_data = std::fs::read("examples/example-3.2.blend")
.expect("Blend file not found!");
let reader = read(&blend_data)
.expect("Failed to read blend data!");
let plane: &Object = reader.iter::<Object>().unwrap()
.find(|object| object.id.get_name() == "Plane")
.unwrap();
let mesh = reader.deref_single(&plane.data.as_instance_of::<Mesh>())
.expect("Could not get mesh from object!");
let mesh_polygons: StructIter<MPoly> = reader.deref(&mesh.mpoly)
.expect("Could not get polygons from mesh!");
let mesh_loops: Vec<&MLoop> = reader.deref(&mesh.mloop)
.expect("Could not get loops from mesh!")
.collect();
let mesh_vertices: Vec<&MVert> = reader.deref(&mesh.mvert)
.expect("Could not get vertices from mesh!")
.collect();
let vertices_per_polygon: Vec<Vec<Vertex>> = mesh_polygons
.map(|polygon| {
(polygon.loopstart..polygon.loopstart + polygon.totloop).into_iter()
.map(|loop_index| {
Vertex {
position: mesh_vertices[mesh_loops[loop_index as usize].v as usize].co
}
})
.collect()
})
.collect();
}
crate功能
根据您的需要启用或禁用功能,以优化编译时间。
功能 | 默认 | 描述 |
---|---|---|
blender2_79 | ✗ | 生成并包含适用于Blender 2.79(64位,小端)的代码 |
blender2_80 | ✗ | 生成并包含适用于Blender 2.80(64位,小端)的代码 |
blender2_80x86 | ✗ | 生成并包含适用于Blender 2.80(32位,小端)的代码 |
blender2_93 | ✗ | 生成并包含适用于Blender 2.93(64位,小端)的代码 |
blender3_2 | ✔ | 生成并包含适用于Blender 3.2(64位,小端)的代码 |
blender3_3 | ✗ | 生成并包含适用于Blender 3.3(64位,小端)的代码 |
all | ✗ | 生成并包含适用于所有上述Blender版本的代码 |
✔ 启用,✗ 禁用
详细信息
blend-rs 严重依赖于由 Blender DNA 生成的代码。Blender DNA 是每个 *.blend
文件的一部分,包含了对文件中所有结构体、类型和名称的描述。Blender 使用 DNA 来实现前向和后向兼容性。blend-rs 使用 DNA 来生成 Rust 代码。
该库属于一组三个库,它们都与读取Blender的.blend文件的主题相关
- blend-inspect-rs:一个用于解析和分析 Blender 的 .blend 文件的 Rust 库。
- blend-bindgen-rs:一个用于生成 Blender 数据结构的 Rust 库。
- blend-rs:一个用于读取 Blender 的 .blend 文件的 Rust 库。