rbx_loader: do not fail zero size meshes & unions

This commit is contained in:
2026-03-04 07:07:29 -08:00
parent c606adaaeb
commit c3b9496e15

View File

@@ -905,24 +905,19 @@ impl PartialMap1<'_>{
deferred_model_deferred_attributes.model.mesh,
deferred_model_deferred_attributes.render
)?;
// If the mesh size is zero we can't auto-scale it, throw it out.
if mesh_size.x==integer::Fixed::ZERO||mesh_size.y==integer::Fixed::ZERO||mesh_size.z==integer::Fixed::ZERO{
println!("[rbx_loader] Mesh with zero size!");
return None;
let mut model=deferred_model_deferred_attributes.model;
model.mesh=mesh;
// avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
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{
mesh,
deferred_attributes:deferred_model_deferred_attributes.model.deferred_attributes,
color:deferred_model_deferred_attributes.model.color,
transform:Planar64Affine3::new(
Planar64Mat3::from_cols([
(deferred_model_deferred_attributes.model.transform.matrix3.x_axis*2/mesh_size.x).divide().narrow_1().unwrap(),
(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
),
})
if mesh_size.y!=integer::Fixed::ZERO{
model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/mesh_size.y).divide().narrow_1().unwrap();
}
if mesh_size.z!=integer::Fixed::ZERO{
model.transform.matrix3.z_axis=(model.transform.matrix3.z_axis*2/mesh_size.z).divide().narrow_1().unwrap();
}
Some(model)
}).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
//insert into primitive_meshes
@@ -933,19 +928,19 @@ impl PartialMap1<'_>{
deferred_union_deferred_attributes.model.mesh,
deferred_union_deferred_attributes.render
)?;
Some(ModelDeferredAttributes{
mesh,
deferred_attributes:deferred_union_deferred_attributes.model.deferred_attributes,
color:deferred_union_deferred_attributes.model.color,
transform:Planar64Affine3::new(
Planar64Mat3::from_cols([
(deferred_union_deferred_attributes.model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap(),
(deferred_union_deferred_attributes.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(),
]),
deferred_union_deferred_attributes.model.transform.translation
),
})
let mut model=deferred_union_deferred_attributes.model;
model.mesh=mesh;
// avoid devide by zero but introduce more edge cases. not sure what the correct thing to do here is.
if size.x!=integer::Fixed::ZERO{
model.transform.matrix3.x_axis=(model.transform.matrix3.x_axis*2/size.x).divide().narrow_1().unwrap();
}
if size.y!=integer::Fixed::ZERO{
model.transform.matrix3.y_axis=(model.transform.matrix3.y_axis*2/size.y).divide().narrow_1().unwrap();
}
if size.z!=integer::Fixed::ZERO{
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())
.filter_map(|model_deferred_attributes|{