10个稳定版本
2.0.0 | 2024年3月13日 |
---|---|
1.3.2 | 2022年7月30日 |
1.2.0 | 2022年5月7日 |
1.1.2 | 2022年3月10日 |
1.1.1 | 2021年6月26日 |
#15 in 数据格式
291 每月下载量
155KB
4.5K SLoC
概述
nobject-rs
是一个用于解析wavefront .obj和.mtl内容的库。为此,该crate暴露了两种方法
load_obj
load_mtl
这两种方法分别接收相应文件(.obj和.mtl)的内容,解析后返回一个结果,该结果可能是某种解析错误,或者包含数据的结构。
请注意,此crate将文件I/O的责任留给了消费应用程序。例如,可以将文件名指定为材质的属性,或将文件名指定为obj文件中的材质库。此库将不会尝试打开和解析这些文件。这留给了消费应用程序/库从解析方法的输出中提取文件信息,找到并打开适当的文件,然后将内容传递给进行解析。
参考
解析基于在以下位置找到的Obj和Mtl规范
示例
Obj解析
fn main() {
let input =
"
o 1
v -0.5 -0.5 0.5
v -0.5 -0.5 -0.5
v -0.5 0.5 -0.5
v -0.5 0.5 0.5
v 0.5 -0.5 0.5
v 0.5 -0.5 -0.5
v 0.5 0.5 -0.5
v 0.5 0.5 0.5
usemtl Default
f 4 3 2 1
f 2 6 5 1
f 3 7 6 2
f 8 7 3 4
f 5 8 4 1
f 6 7 8 5
";
let res = nobject_rs::load_obj(&input).unwrap();
let group = &res.groups["default"];
let face_group = &res.faces["default"];
assert_eq!(res.vertices.len(), 8);
assert_eq!(group.material_name, "Default".to_string());
assert_eq!(res.normals.len(), 0);
assert_eq!(res.faces.len(), 1);
assert_eq!(face_group.len(), 6);;
}
Mtl解析
fn main() {
let input =
"newmtl frost_wind
Ka 0.2 0.2 0.2
Kd 0.6 0.6 0.6
Ks 0.1 0.1 0.1
d 1
Ns 200
illum 2
map_d -mm 0.200 0.800 window.mps";
let res = nobject_rs::load_mtl(&input).unwrap();
assert_eq!(res.len(), 1);
}
依赖项
~1.3–2MB
~41K SLoC