forked from StrafesNET/strafe-project
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::CSGMDL2(mesh_data2))=>mesh_data2.mesh,
|
||||||
rbx_mesh::mesh_data::MeshData::CSGMDL(rbx_mesh::mesh_data::CSGMDL::CSGMDL4(mesh_data4))=>mesh_data4.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{
|
for [MeshDataVertexId(vertex_id0),MeshDataVertexId(vertex_id1),MeshDataVertexId(vertex_id2)] in graphics_mesh.faces{
|
||||||
let face=[
|
let face=[
|
||||||
graphics_mesh.vertices.get(vertex_id0 as usize).ok_or(Error::MissingVertexId(vertex_id0))?,
|
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 mut normal_agreement_checker=MeshDataNormalChecker::new();
|
||||||
let face=face.into_iter().map(|vertex|{
|
let face=face.into_iter().map(|vertex|{
|
||||||
normal_agreement_checker.check(vertex.normal_id);
|
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 normal=mb.acquire_normal_id(vec3::try_from_f32_array(vertex.norm)?);
|
||||||
let tex_coord=glam::Vec2::from_array(vertex.tex);
|
let tex_coord=glam::Vec2::from_array(vertex.tex);
|
||||||
let maybe_face_description=&cube_face_description[vertex.normal_id as usize-1];
|
let maybe_face_description=&cube_face_description[vertex.normal_id as usize-1];
|
||||||
|
|||||||
Reference in New Issue
Block a user