rbx_loader: do not fail zero size meshes & unions
This commit is contained in:
@@ -905,24 +905,19 @@ impl PartialMap1<'_>{
|
|||||||
deferred_model_deferred_attributes.model.mesh,
|
deferred_model_deferred_attributes.model.mesh,
|
||||||
deferred_model_deferred_attributes.render
|
deferred_model_deferred_attributes.render
|
||||||
)?;
|
)?;
|
||||||
// If the mesh size is zero we can't auto-scale it, throw it out.
|
let mut model=deferred_model_deferred_attributes.model;
|
||||||
if mesh_size.x==integer::Fixed::ZERO||mesh_size.y==integer::Fixed::ZERO||mesh_size.z==integer::Fixed::ZERO{
|
model.mesh=mesh;
|
||||||
println!("[rbx_loader] Mesh with zero size!");
|
// avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
|
||||||
return None;
|
if mesh_size.x!=integer::Fixed::ZERO{
|
||||||
|
model.transform.matrix3.x_axis=(model.transform.matrix3.x_axis*2/mesh_size.x).divide().narrow_1().unwrap();
|
||||||
}
|
}
|
||||||
Some(ModelDeferredAttributes{
|
if mesh_size.y!=integer::Fixed::ZERO{
|
||||||
mesh,
|
model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/mesh_size.y).divide().narrow_1().unwrap();
|
||||||
deferred_attributes:deferred_model_deferred_attributes.model.deferred_attributes,
|
}
|
||||||
color:deferred_model_deferred_attributes.model.color,
|
if mesh_size.z!=integer::Fixed::ZERO{
|
||||||
transform:Planar64Affine3::new(
|
model.transform.matrix3.z_axis=(model.transform.matrix3.z_axis*2/mesh_size.z).divide().narrow_1().unwrap();
|
||||||
Planar64Mat3::from_cols([
|
}
|
||||||
(deferred_model_deferred_attributes.model.transform.matrix3.x_axis*2/mesh_size.x).divide().narrow_1().unwrap(),
|
Some(model)
|
||||||
(deferred_model_deferred_attributes.model.transform.matrix3.y_axis*2/mesh_size.y).divide().narrow_1().unwrap(),
|
|
||||||
(deferred_model_deferred_attributes.model.transform.matrix3.z_axis*2/mesh_size.z).divide().narrow_1().unwrap(),
|
|
||||||
]),
|
|
||||||
deferred_model_deferred_attributes.model.transform.translation
|
|
||||||
),
|
|
||||||
})
|
|
||||||
}).chain(self.deferred_unions_deferred_attributes.into_iter().flat_map(|deferred_union_deferred_attributes|{
|
}).chain(self.deferred_unions_deferred_attributes.into_iter().flat_map(|deferred_union_deferred_attributes|{
|
||||||
//meshes need to be cloned from loaded_meshes with a new id when they are used with a new render_id
|
//meshes need to be cloned from loaded_meshes with a new id when they are used with a new render_id
|
||||||
//insert into primitive_meshes
|
//insert into primitive_meshes
|
||||||
@@ -933,19 +928,19 @@ impl PartialMap1<'_>{
|
|||||||
deferred_union_deferred_attributes.model.mesh,
|
deferred_union_deferred_attributes.model.mesh,
|
||||||
deferred_union_deferred_attributes.render
|
deferred_union_deferred_attributes.render
|
||||||
)?;
|
)?;
|
||||||
Some(ModelDeferredAttributes{
|
let mut model=deferred_union_deferred_attributes.model;
|
||||||
mesh,
|
model.mesh=mesh;
|
||||||
deferred_attributes:deferred_union_deferred_attributes.model.deferred_attributes,
|
// avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
|
||||||
color:deferred_union_deferred_attributes.model.color,
|
if size.x!=integer::Fixed::ZERO{
|
||||||
transform:Planar64Affine3::new(
|
model.transform.matrix3.x_axis=(model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap();
|
||||||
Planar64Mat3::from_cols([
|
}
|
||||||
(deferred_union_deferred_attributes.model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap(),
|
if size.y!=integer::Fixed::ZERO{
|
||||||
(deferred_union_deferred_attributes.model.transform.matrix3.y_axis*2/size.y).divide().narrow_1().unwrap(),
|
model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/size.y).divide().narrow_1().unwrap();
|
||||||
(deferred_union_deferred_attributes.model.transform.matrix3.z_axis*2/size.z).divide().narrow_1().unwrap(),
|
}
|
||||||
]),
|
if size.z!=integer::Fixed::ZERO{
|
||||||
deferred_union_deferred_attributes.model.transform.translation
|
model.transform.matrix3.z_axis=(model.transform.matrix3.z_axis*2/size.z).divide().narrow_1().unwrap();
|
||||||
),
|
}
|
||||||
})
|
Some(model)
|
||||||
}))
|
}))
|
||||||
.chain(self.primitive_models_deferred_attributes.into_iter())
|
.chain(self.primitive_models_deferred_attributes.into_iter())
|
||||||
.filter_map(|model_deferred_attributes|{
|
.filter_map(|model_deferred_attributes|{
|
||||||
|
|||||||
Reference in New Issue
Block a user