mirror of
https://codeberg.org/icewind/vbsp.git
synced 2026-06-03 10:44:07 +02:00
wip obj converter
This commit is contained in:
parent
9b18522190
commit
0bad24a370
6 changed files with 112 additions and 12 deletions
65
examples/convert.rs
Normal file
65
examples/convert.rs
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
use main_error::MainError;
|
||||
use obj::{Group, IndexTuple, Obj, ObjData, Object, SimplePolygon};
|
||||
use vbsp::TextureFlags;
|
||||
|
||||
fn main() -> Result<(), MainError> {
|
||||
let mut args = std::env::args();
|
||||
let _ = args.next();
|
||||
let data = std::fs::read(args.next().expect("No demo file provided"))?;
|
||||
let bsp = vbsp::Bsp::read(&data)?;
|
||||
|
||||
let vertices = bsp
|
||||
.vertices
|
||||
.iter()
|
||||
.map(|vertex| <[f32; 3]>::from(&vertex.position))
|
||||
.collect();
|
||||
|
||||
let polygons = bsp
|
||||
.original_faces()
|
||||
.filter(|face| {
|
||||
face.texture()
|
||||
.map(|texture| {
|
||||
!texture.flags.intersects(
|
||||
TextureFlags::LIGHT
|
||||
| TextureFlags::SKY2D
|
||||
| TextureFlags::SKY
|
||||
| TextureFlags::SKIP
|
||||
| TextureFlags::NODRAW,
|
||||
)
|
||||
})
|
||||
.unwrap_or_default()
|
||||
})
|
||||
.map(|face| {
|
||||
SimplePolygon(
|
||||
face.vertex_indexes()
|
||||
.map(|vertex| IndexTuple(vertex as usize, None, None))
|
||||
.collect(),
|
||||
)
|
||||
})
|
||||
.collect();
|
||||
|
||||
let obj_data = ObjData {
|
||||
position: vertices,
|
||||
texture: Vec::new(),
|
||||
normal: Vec::new(),
|
||||
objects: vec![Object {
|
||||
name: "".to_string(),
|
||||
groups: vec![Group {
|
||||
name: "".to_string(),
|
||||
index: 0,
|
||||
material: None,
|
||||
polys: polygons,
|
||||
}],
|
||||
}],
|
||||
material_libs: Vec::new(),
|
||||
};
|
||||
|
||||
let obj = Obj {
|
||||
data: obj_data,
|
||||
path: Default::default(),
|
||||
};
|
||||
|
||||
obj.save("out.obj")?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
fn main() -> Result<(), vbsp::BspError> {
|
||||
let mut args = std::env::args();
|
||||
let _ = args.next();
|
||||
let data = std::fs::read(args.next().unwrap())?;
|
||||
let _ = vbsp::Bsp::read(&data)?;
|
||||
let data = std::fs::read(args.next().expect("No demo file provided"))?;
|
||||
vbsp::Bsp::read(&data)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue