calculate mesh size and plumb it through to compose with the transform
This commit is contained in:
parent
f4f9bb47a7
commit
0c5f47d1af
46
src/rbx.rs
46
src/rbx.rs
@ -727,7 +727,10 @@ where
|
|||||||
deferred_models_deferred_attributes,
|
deferred_models_deferred_attributes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
struct MeshWithAabb{
|
||||||
|
mesh:model::Mesh,
|
||||||
|
aabb:strafesnet_common::aabb::Aabb,
|
||||||
|
}
|
||||||
pub struct PartialMap1{
|
pub struct PartialMap1{
|
||||||
primitive_meshes:Vec<model::Mesh>,
|
primitive_meshes:Vec<model::Mesh>,
|
||||||
primitive_models_deferred_attributes:Vec<ModelDeferredAttributes>,
|
primitive_models_deferred_attributes:Vec<ModelDeferredAttributes>,
|
||||||
@ -748,10 +751,19 @@ impl PartialMap1{
|
|||||||
|
|
||||||
//decode roblox meshes
|
//decode roblox meshes
|
||||||
//generate mesh_id_map based on meshes that failed to load
|
//generate mesh_id_map based on meshes that failed to load
|
||||||
let loaded_meshes:HashMap<model::MeshId,model::Mesh>=
|
let loaded_meshes:HashMap<model::MeshId,MeshWithAabb>=
|
||||||
meshpart_meshes.into_iter().flat_map(|(old_mesh_id,roblox_mesh_bytes)|
|
meshpart_meshes.into_iter().flat_map(|(old_mesh_id,roblox_mesh_bytes)|
|
||||||
match crate::mesh::convert(roblox_mesh_bytes){
|
match crate::mesh::convert(roblox_mesh_bytes){
|
||||||
Ok(mesh)=>Some((old_mesh_id,mesh)),
|
Ok(mesh)=>{
|
||||||
|
let mut aabb=strafesnet_common::aabb::Aabb::default();
|
||||||
|
for &pos in &mesh.unique_pos{
|
||||||
|
aabb.grow(pos);
|
||||||
|
}
|
||||||
|
Some((old_mesh_id,MeshWithAabb{
|
||||||
|
mesh,
|
||||||
|
aabb,
|
||||||
|
}))
|
||||||
|
},
|
||||||
Err(e)=>{
|
Err(e)=>{
|
||||||
println!("Error converting mesh: {e:?}");
|
println!("Error converting mesh: {e:?}");
|
||||||
None
|
None
|
||||||
@ -762,11 +774,11 @@ impl PartialMap1{
|
|||||||
let mut mesh_id_from_render_config_id=HashMap::new();
|
let mut mesh_id_from_render_config_id=HashMap::new();
|
||||||
//ignore meshes that fail to load completely for now
|
//ignore meshes that fail to load completely for now
|
||||||
let mut acquire_mesh_id_from_render_config_id=|old_mesh_id,render|{
|
let mut acquire_mesh_id_from_render_config_id=|old_mesh_id,render|{
|
||||||
loaded_meshes.get(&old_mesh_id).map(|mesh|
|
loaded_meshes.get(&old_mesh_id).map(|mesh_with_aabb|(
|
||||||
*mesh_id_from_render_config_id.entry(old_mesh_id).or_insert_with(||HashMap::new())
|
*mesh_id_from_render_config_id.entry(old_mesh_id).or_insert_with(||HashMap::new())
|
||||||
.entry(render).or_insert_with(||{
|
.entry(render).or_insert_with(||{
|
||||||
let mesh_id=model::MeshId::new(self.primitive_meshes.len() as u32);
|
let mesh_id=model::MeshId::new(self.primitive_meshes.len() as u32);
|
||||||
let mut mesh_clone=mesh.clone();
|
let mut mesh_clone=mesh_with_aabb.mesh.clone();
|
||||||
//add a render group lool
|
//add a render group lool
|
||||||
mesh_clone.graphics_groups.push(model::IndexedGraphicsGroup{
|
mesh_clone.graphics_groups.push(model::IndexedGraphicsGroup{
|
||||||
render,
|
render,
|
||||||
@ -775,22 +787,32 @@ impl PartialMap1{
|
|||||||
});
|
});
|
||||||
self.primitive_meshes.push(mesh_clone);
|
self.primitive_meshes.push(mesh_clone);
|
||||||
mesh_id
|
mesh_id
|
||||||
})
|
}),
|
||||||
)
|
&mesh_with_aabb.aabb,
|
||||||
|
))
|
||||||
};
|
};
|
||||||
//now that the meshes are loaded, these models can be generated
|
//now that the meshes are loaded, these models can be generated
|
||||||
let models_owned_attributes:Vec<ModelOwnedAttributes>=
|
let models_owned_attributes:Vec<ModelOwnedAttributes>=
|
||||||
self.deferred_models_deferred_attributes.into_iter().flat_map(|deferred_model_deferred_attributes|{
|
self.deferred_models_deferred_attributes.into_iter().flat_map(|deferred_model_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
|
||||||
|
let (mesh,aabb)=acquire_mesh_id_from_render_config_id(
|
||||||
|
deferred_model_deferred_attributes.model.mesh,
|
||||||
|
deferred_model_deferred_attributes.render
|
||||||
|
)?;
|
||||||
|
let size=aabb.size();
|
||||||
Some(ModelDeferredAttributes{
|
Some(ModelDeferredAttributes{
|
||||||
mesh:acquire_mesh_id_from_render_config_id(
|
mesh,
|
||||||
deferred_model_deferred_attributes.model.mesh,
|
|
||||||
deferred_model_deferred_attributes.render
|
|
||||||
)?,
|
|
||||||
deferred_attributes:deferred_model_deferred_attributes.model.deferred_attributes,
|
deferred_attributes:deferred_model_deferred_attributes.model.deferred_attributes,
|
||||||
color:deferred_model_deferred_attributes.model.color,
|
color:deferred_model_deferred_attributes.model.color,
|
||||||
transform:deferred_model_deferred_attributes.model.transform,
|
transform:Planar64Affine3::new(
|
||||||
|
Planar64Mat3::from_cols(
|
||||||
|
deferred_model_deferred_attributes.model.transform.matrix3.x_axis*2/size.x(),
|
||||||
|
deferred_model_deferred_attributes.model.transform.matrix3.y_axis*2/size.y(),
|
||||||
|
deferred_model_deferred_attributes.model.transform.matrix3.z_axis*2/size.z()
|
||||||
|
),
|
||||||
|
deferred_model_deferred_attributes.model.transform.translation
|
||||||
|
),
|
||||||
})
|
})
|
||||||
}).chain(self.primitive_models_deferred_attributes.into_iter())
|
}).chain(self.primitive_models_deferred_attributes.into_iter())
|
||||||
.enumerate().map(|(model_id,model_deferred_attributes)|{
|
.enumerate().map(|(model_id,model_deferred_attributes)|{
|
||||||
|
Loading…
Reference in New Issue
Block a user