bsp_loader: split brush functions so I can be lazy
This commit is contained in:
parent
eec6a1fa72
commit
10ca30db2e
@ -212,6 +212,35 @@ impl std::fmt::Display for BrushToMeshError{
|
|||||||
}
|
}
|
||||||
impl core::error::Error for BrushToMeshError{}
|
impl core::error::Error for BrushToMeshError{}
|
||||||
|
|
||||||
|
pub fn faces_to_mesh(faces:Vec<Vec<integer::Planar64Vec3>>)->model::Mesh{
|
||||||
|
// generate the mesh
|
||||||
|
let mut mb=model::MeshBuilder::new();
|
||||||
|
let color=mb.acquire_color_id(glam::Vec4::ONE);
|
||||||
|
let tex=mb.acquire_tex_id(glam::Vec2::ZERO);
|
||||||
|
// normals are ignored by physics
|
||||||
|
let normal=mb.acquire_normal_id(integer::vec3::ZERO);
|
||||||
|
|
||||||
|
let polygon_list=faces.into_iter().map(|face|{
|
||||||
|
face.into_iter().map(|pos|{
|
||||||
|
let pos=mb.acquire_pos_id(pos);
|
||||||
|
mb.acquire_vertex_id(model::IndexedVertex{
|
||||||
|
pos,
|
||||||
|
tex,
|
||||||
|
normal,
|
||||||
|
color,
|
||||||
|
})
|
||||||
|
}).collect()
|
||||||
|
}).collect();
|
||||||
|
|
||||||
|
let polygon_groups=vec![model::PolygonGroup::PolygonList(model::PolygonList::new(polygon_list))];
|
||||||
|
let physics_groups=vec![model::IndexedPhysicsGroup{
|
||||||
|
groups:vec![model::PolygonGroupId::new(0)],
|
||||||
|
}];
|
||||||
|
let graphics_groups=vec![];
|
||||||
|
|
||||||
|
mb.build(polygon_groups,graphics_groups,physics_groups)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn brush_to_mesh(bsp:&vbsp::Bsp,brush:&vbsp::Brush)->Result<model::Mesh,BrushToMeshError>{
|
pub fn brush_to_mesh(bsp:&vbsp::Bsp,brush:&vbsp::Brush)->Result<model::Mesh,BrushToMeshError>{
|
||||||
let brush_start_idx=brush.brush_side as usize;
|
let brush_start_idx=brush.brush_side as usize;
|
||||||
let sides_range=brush_start_idx..brush_start_idx+brush.num_brush_sides as usize;
|
let sides_range=brush_start_idx..brush_start_idx+brush.num_brush_sides as usize;
|
||||||
@ -230,32 +259,23 @@ pub fn brush_to_mesh(bsp:&vbsp::Bsp,brush:&vbsp::Brush)->Result<model::Mesh,Brus
|
|||||||
|
|
||||||
let faces=planes_to_faces(face_list).map_err(BrushToMeshError::InvalidPlanes)?;
|
let faces=planes_to_faces(face_list).map_err(BrushToMeshError::InvalidPlanes)?;
|
||||||
|
|
||||||
// generate the mesh
|
let mesh=faces_to_mesh(faces.faces);
|
||||||
let mut mb=model::MeshBuilder::new();
|
|
||||||
let color=mb.acquire_color_id(glam::Vec4::ONE);
|
|
||||||
let tex=mb.acquire_tex_id(glam::Vec2::ZERO);
|
|
||||||
// normals are ignored by physics
|
|
||||||
let normal=mb.acquire_normal_id(integer::vec3::ZERO);
|
|
||||||
|
|
||||||
let polygon_list=faces.faces.into_iter().map(|face|{
|
Ok(mesh)
|
||||||
face.into_iter().map(|pos|{
|
}
|
||||||
let pos=mb.acquire_pos_id(pos);
|
|
||||||
mb.acquire_vertex_id(model::IndexedVertex{
|
|
||||||
pos,
|
|
||||||
tex,
|
|
||||||
normal,
|
|
||||||
color,
|
|
||||||
})
|
|
||||||
}).collect()
|
|
||||||
}).collect();
|
|
||||||
|
|
||||||
let polygon_groups=vec![model::PolygonGroup::PolygonList(model::PolygonList::new(polygon_list))];
|
pub fn unit_cube()->model::Mesh{
|
||||||
let physics_groups=vec![model::IndexedPhysicsGroup{
|
let face_list=[
|
||||||
groups:vec![model::PolygonGroupId::new(0)],
|
Face{normal:integer::vec3::X,dot:Planar64::ONE},
|
||||||
}];
|
Face{normal:integer::vec3::Y,dot:Planar64::ONE},
|
||||||
let graphics_groups=vec![];
|
Face{normal:integer::vec3::Z,dot:Planar64::ONE},
|
||||||
|
Face{normal:integer::vec3::NEG_X,dot:Planar64::ONE},
|
||||||
Ok(mb.build(polygon_groups,graphics_groups,physics_groups))
|
Face{normal:integer::vec3::NEG_Y,dot:Planar64::ONE},
|
||||||
|
Face{normal:integer::vec3::NEG_Z,dot:Planar64::ONE},
|
||||||
|
].into_iter().collect();
|
||||||
|
let faces=planes_to_faces(face_list).unwrap();
|
||||||
|
let mesh=faces_to_mesh(faces.faces);
|
||||||
|
mesh
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user