rbx_loader: auto-scale union graphics to fit size
This commit is contained in:
@@ -84,6 +84,15 @@ pub fn convert(
|
||||
rbx_mesh::mesh_data::MeshData::CSGMDL(rbx_mesh::mesh_data::CSGMDL::CSGMDL2(mesh_data2))=>mesh_data2.mesh,
|
||||
rbx_mesh::mesh_data::MeshData::CSGMDL(rbx_mesh::mesh_data::CSGMDL::CSGMDL4(mesh_data4))=>mesh_data4.mesh,
|
||||
};
|
||||
//autoscale to size, idk what roblox is doing with the graphics mesh size
|
||||
let mut pos_min=glam::Vec3::MAX;
|
||||
let mut pos_max=glam::Vec3::MIN;
|
||||
for vertex in &graphics_mesh.vertices{
|
||||
let p=vertex.pos.into();
|
||||
pos_min=pos_min.min(p);
|
||||
pos_max=pos_max.max(p);
|
||||
}
|
||||
let graphics_size=pos_max-pos_min;
|
||||
for [MeshDataVertexId(vertex_id0),MeshDataVertexId(vertex_id1),MeshDataVertexId(vertex_id2)] in graphics_mesh.faces{
|
||||
let face=[
|
||||
graphics_mesh.vertices.get(vertex_id0 as usize).ok_or(Error::MissingVertexId(vertex_id0))?,
|
||||
@@ -93,7 +102,8 @@ pub fn convert(
|
||||
let mut normal_agreement_checker=MeshDataNormalChecker::new();
|
||||
let face=face.into_iter().map(|vertex|{
|
||||
normal_agreement_checker.check(vertex.normal_id);
|
||||
let pos=mb.acquire_pos_id(vec3::try_from_f32_array(vertex.pos)?);
|
||||
let pos=glam::Vec3::from_array(vertex.pos)/graphics_size;
|
||||
let pos=mb.acquire_pos_id(vec3::try_from_f32_array(pos.to_array())?);
|
||||
let normal=mb.acquire_normal_id(vec3::try_from_f32_array(vertex.norm)?);
|
||||
let tex_coord=glam::Vec2::from_array(vertex.tex);
|
||||
let maybe_face_description=&cube_face_description[vertex.normal_id as usize-1];
|
||||
|
||||
Reference in New Issue
Block a user