Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
74cc6bc4a5 | |||
78cfca8d09 |
@ -568,7 +568,7 @@ pub mod vec3{
|
|||||||
Planar64Vec3::new(array.map(Planar64::raw))
|
Planar64Vec3::new(array.map(Planar64::raw))
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn raw_xyz(x:i64,y:i64,z:i64)->Planar64Vec3{
|
pub const fn raw_xyz(x:i64,y:i64,z:i64)->Planar64Vec3{
|
||||||
Planar64Vec3::new([Planar64::raw(x),Planar64::raw(y),Planar64::raw(z)])
|
Planar64Vec3::new([Planar64::raw(x),Planar64::raw(y),Planar64::raw(z)])
|
||||||
}
|
}
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -66,6 +66,7 @@ struct Face{
|
|||||||
normal:Planar64Vec3,
|
normal:Planar64Vec3,
|
||||||
dot:Planar64,
|
dot:Planar64,
|
||||||
}
|
}
|
||||||
|
#[derive(Clone)]
|
||||||
struct Vert(Planar64Vec3);
|
struct Vert(Planar64Vec3);
|
||||||
pub trait MeshQuery{
|
pub trait MeshQuery{
|
||||||
type Face:Clone;
|
type Face:Clone;
|
||||||
@ -90,35 +91,39 @@ pub trait MeshQuery{
|
|||||||
fn vert_edges(&self,vert_id:Self::Vert)->Cow<[Self::Edge]>;
|
fn vert_edges(&self,vert_id:Self::Vert)->Cow<[Self::Edge]>;
|
||||||
fn vert_faces(&self,vert_id:Self::Vert)->Cow<[Self::Face]>;
|
fn vert_faces(&self,vert_id:Self::Vert)->Cow<[Self::Face]>;
|
||||||
}
|
}
|
||||||
|
#[derive(Clone)]
|
||||||
struct FaceRefs{
|
struct FaceRefs{
|
||||||
edges:Vec<SubmeshDirectedEdgeId>,
|
edges:Cow<'static,[SubmeshDirectedEdgeId]>,
|
||||||
//verts:Vec<VertId>,
|
//verts:Cow<'static,[VertId]>,
|
||||||
}
|
}
|
||||||
|
#[derive(Clone)]
|
||||||
struct EdgeRefs{
|
struct EdgeRefs{
|
||||||
faces:[SubmeshFaceId;2],//left, right
|
faces:[SubmeshFaceId;2],//left, right
|
||||||
verts:[SubmeshVertId;2],//bottom, top
|
verts:[SubmeshVertId;2],//bottom, top
|
||||||
}
|
}
|
||||||
|
#[derive(Clone)]
|
||||||
struct VertRefs{
|
struct VertRefs{
|
||||||
faces:Vec<SubmeshFaceId>,
|
faces:Cow<'static,[SubmeshFaceId]>,
|
||||||
edges:Vec<SubmeshDirectedEdgeId>,
|
edges:Cow<'static,[SubmeshDirectedEdgeId]>,
|
||||||
}
|
}
|
||||||
|
// I don't want to use cow in the mesh, I'd rather have another type and monomorphize using the MeshQuery trait
|
||||||
pub struct PhysicsMeshData{
|
pub struct PhysicsMeshData{
|
||||||
//this contains all real and virtual faces used in both the complete mesh and convex submeshes
|
//this contains all real and virtual faces used in both the complete mesh and convex submeshes
|
||||||
//faces are sorted such that all faces that belong to the complete mesh appear first, and then
|
//faces are sorted such that all faces that belong to the complete mesh appear first, and then
|
||||||
//all remaining faces are virtual to operate internal logic of the face crawler
|
//all remaining faces are virtual to operate internal logic of the face crawler
|
||||||
//and cannot be part of a physics collision
|
//and cannot be part of a physics collision
|
||||||
//virtual faces are only used in convex submeshes.
|
//virtual faces are only used in convex submeshes.
|
||||||
faces:Vec<Face>,//MeshFaceId indexes this list
|
faces:Cow<'static,[Face]>,//MeshFaceId indexes this list
|
||||||
verts:Vec<Vert>,//MeshVertId indexes this list
|
verts:Cow<'static,[Vert]>,//MeshVertId indexes this list
|
||||||
}
|
}
|
||||||
pub struct PhysicsMeshTopology{
|
pub struct PhysicsMeshTopology{
|
||||||
//mapping of local ids to PhysicsMeshData ids
|
//mapping of local ids to PhysicsMeshData ids
|
||||||
faces:Vec<MeshFaceId>,//SubmeshFaceId indexes this list
|
faces:Cow<'static,[MeshFaceId]>,//SubmeshFaceId indexes this list
|
||||||
verts:Vec<MeshVertId>,//SubmeshVertId indexes this list
|
verts:Cow<'static,[MeshVertId]>,//SubmeshVertId indexes this list
|
||||||
//all ids here are local to this object
|
//all ids here are local to this object
|
||||||
face_topology:Vec<FaceRefs>,
|
face_topology:Cow<'static,[FaceRefs]>,
|
||||||
edge_topology:Vec<EdgeRefs>,
|
edge_topology:Cow<'static,[EdgeRefs]>,
|
||||||
vert_topology:Vec<VertRefs>,
|
vert_topology:Cow<'static,[VertRefs]>,
|
||||||
}
|
}
|
||||||
#[derive(Clone,Copy,Hash,id::Id,Eq,PartialEq)]
|
#[derive(Clone,Copy,Hash,id::Id,Eq,PartialEq)]
|
||||||
pub struct PhysicsMeshId(u32);
|
pub struct PhysicsMeshId(u32);
|
||||||
@ -144,39 +149,41 @@ pub struct PhysicsMesh{
|
|||||||
}
|
}
|
||||||
impl PhysicsMesh{
|
impl PhysicsMesh{
|
||||||
pub fn unit_cube()->Self{
|
pub fn unit_cube()->Self{
|
||||||
|
const MESH_DATA_FACES:[Face;6]=[
|
||||||
|
Face{normal:vec3::raw_xyz( 4294967296, 0, 0),dot:Planar64::raw(4294967296)},
|
||||||
|
Face{normal:vec3::raw_xyz( 0, 4294967296, 0),dot:Planar64::raw(4294967296)},
|
||||||
|
Face{normal:vec3::raw_xyz( 0, 0, 4294967296),dot:Planar64::raw(4294967296)},
|
||||||
|
Face{normal:vec3::raw_xyz(-4294967296, 0, 0),dot:Planar64::raw(4294967296)},
|
||||||
|
Face{normal:vec3::raw_xyz( 0,-4294967296, 0),dot:Planar64::raw(4294967296)},
|
||||||
|
Face{normal:vec3::raw_xyz( 0, 0,-4294967296),dot:Planar64::raw(4294967296)}
|
||||||
|
];
|
||||||
|
const MESH_DATA_VERTS:[Vert;8]=[
|
||||||
|
Vert(vec3::raw_xyz( 4294967296,-4294967296,-4294967296)),
|
||||||
|
Vert(vec3::raw_xyz( 4294967296, 4294967296,-4294967296)),
|
||||||
|
Vert(vec3::raw_xyz( 4294967296, 4294967296, 4294967296)),
|
||||||
|
Vert(vec3::raw_xyz( 4294967296,-4294967296, 4294967296)),
|
||||||
|
Vert(vec3::raw_xyz(-4294967296, 4294967296,-4294967296)),
|
||||||
|
Vert(vec3::raw_xyz(-4294967296, 4294967296, 4294967296)),
|
||||||
|
Vert(vec3::raw_xyz(-4294967296,-4294967296, 4294967296)),
|
||||||
|
Vert(vec3::raw_xyz(-4294967296,-4294967296,-4294967296))
|
||||||
|
];
|
||||||
//go go gadget debug print mesh
|
//go go gadget debug print mesh
|
||||||
let data=PhysicsMeshData{
|
let data=PhysicsMeshData{
|
||||||
faces:vec![
|
faces:Cow::Borrowed(&MESH_DATA_FACES),
|
||||||
Face{normal:vec3::raw_xyz( 4294967296, 0, 0),dot:Planar64::raw(4294967296)},
|
verts:Cow::Borrowed(&MESH_DATA_VERTS)
|
||||||
Face{normal:vec3::raw_xyz( 0, 4294967296, 0),dot:Planar64::raw(4294967296)},
|
|
||||||
Face{normal:vec3::raw_xyz( 0, 0, 4294967296),dot:Planar64::raw(4294967296)},
|
|
||||||
Face{normal:vec3::raw_xyz(-4294967296, 0, 0),dot:Planar64::raw(4294967296)},
|
|
||||||
Face{normal:vec3::raw_xyz( 0,-4294967296, 0),dot:Planar64::raw(4294967296)},
|
|
||||||
Face{normal:vec3::raw_xyz( 0, 0,-4294967296),dot:Planar64::raw(4294967296)}
|
|
||||||
],
|
|
||||||
verts:vec![
|
|
||||||
Vert(vec3::raw_xyz( 4294967296,-4294967296,-4294967296)),
|
|
||||||
Vert(vec3::raw_xyz( 4294967296, 4294967296,-4294967296)),
|
|
||||||
Vert(vec3::raw_xyz( 4294967296, 4294967296, 4294967296)),
|
|
||||||
Vert(vec3::raw_xyz( 4294967296,-4294967296, 4294967296)),
|
|
||||||
Vert(vec3::raw_xyz(-4294967296, 4294967296,-4294967296)),
|
|
||||||
Vert(vec3::raw_xyz(-4294967296, 4294967296, 4294967296)),
|
|
||||||
Vert(vec3::raw_xyz(-4294967296,-4294967296, 4294967296)),
|
|
||||||
Vert(vec3::raw_xyz(-4294967296,-4294967296,-4294967296))
|
|
||||||
]
|
|
||||||
};
|
};
|
||||||
let mesh_topology=PhysicsMeshTopology{
|
let mesh_topology=PhysicsMeshTopology{
|
||||||
faces:(0..data.faces.len() as u32).map(MeshFaceId::new).collect(),
|
faces:(0..data.faces.len() as u32).map(MeshFaceId::new).collect(),
|
||||||
verts:(0..data.verts.len() as u32).map(MeshVertId::new).collect(),
|
verts:(0..data.verts.len() as u32).map(MeshVertId::new).collect(),
|
||||||
face_topology:vec![
|
face_topology:Cow::Borrowed(&[
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId((9223372036854775808u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775809u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775810u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(3)]},
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId((9223372036854775808u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775809u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775810u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(3)])},
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId((9223372036854775812u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775813u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(6),SubmeshDirectedEdgeId(1)]},
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId((9223372036854775812u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775813u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(6),SubmeshDirectedEdgeId(1)])},
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId(7),SubmeshDirectedEdgeId(2),SubmeshDirectedEdgeId((9223372036854775814u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775816u64-(1<<63)+(1<<31)) as u32)]},
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(7),SubmeshDirectedEdgeId(2),SubmeshDirectedEdgeId((9223372036854775814u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775816u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId(8),SubmeshDirectedEdgeId(5),SubmeshDirectedEdgeId((9223372036854775817u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(10)]},
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(8),SubmeshDirectedEdgeId(5),SubmeshDirectedEdgeId((9223372036854775817u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(10)])},
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId((9223372036854775815u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775818u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(11),SubmeshDirectedEdgeId((9223372036854775811u64-(1<<63)+(1<<31)) as u32)]},
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId((9223372036854775815u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775818u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(11),SubmeshDirectedEdgeId((9223372036854775811u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
FaceRefs{edges:vec![SubmeshDirectedEdgeId(4),SubmeshDirectedEdgeId(0),SubmeshDirectedEdgeId((9223372036854775819u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(9)]}
|
FaceRefs{edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(4),SubmeshDirectedEdgeId(0),SubmeshDirectedEdgeId((9223372036854775819u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(9)])},
|
||||||
],
|
]),
|
||||||
edge_topology:vec![
|
edge_topology:Cow::Borrowed(&[
|
||||||
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(5)],verts:[SubmeshVertId(0),SubmeshVertId(1)]},
|
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(5)],verts:[SubmeshVertId(0),SubmeshVertId(1)]},
|
||||||
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(1)],verts:[SubmeshVertId(1),SubmeshVertId(2)]},
|
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(1)],verts:[SubmeshVertId(1),SubmeshVertId(2)]},
|
||||||
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(2)],verts:[SubmeshVertId(2),SubmeshVertId(3)]},
|
EdgeRefs{faces:[SubmeshFaceId(0),SubmeshFaceId(2)],verts:[SubmeshVertId(2),SubmeshVertId(3)]},
|
||||||
@ -189,17 +196,17 @@ impl PhysicsMesh{
|
|||||||
EdgeRefs{faces:[SubmeshFaceId(3),SubmeshFaceId(5)],verts:[SubmeshVertId(4),SubmeshVertId(7)]},
|
EdgeRefs{faces:[SubmeshFaceId(3),SubmeshFaceId(5)],verts:[SubmeshVertId(4),SubmeshVertId(7)]},
|
||||||
EdgeRefs{faces:[SubmeshFaceId(4),SubmeshFaceId(3)],verts:[SubmeshVertId(6),SubmeshVertId(7)]},
|
EdgeRefs{faces:[SubmeshFaceId(4),SubmeshFaceId(3)],verts:[SubmeshVertId(6),SubmeshVertId(7)]},
|
||||||
EdgeRefs{faces:[SubmeshFaceId(5),SubmeshFaceId(4)],verts:[SubmeshVertId(0),SubmeshVertId(7)]}
|
EdgeRefs{faces:[SubmeshFaceId(5),SubmeshFaceId(4)],verts:[SubmeshVertId(0),SubmeshVertId(7)]}
|
||||||
],
|
]),
|
||||||
vert_topology:vec![
|
vert_topology:Cow::Borrowed(&[
|
||||||
VertRefs{faces:vec![SubmeshFaceId(0),SubmeshFaceId(4),SubmeshFaceId(5)],edges:vec![SubmeshDirectedEdgeId((9223372036854775811u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775819u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775808u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(0),SubmeshFaceId(4),SubmeshFaceId(5)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId((9223372036854775811u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775819u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775808u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(0),SubmeshFaceId(5),SubmeshFaceId(1)],edges:vec![SubmeshDirectedEdgeId((9223372036854775812u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(0),SubmeshDirectedEdgeId((9223372036854775809u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(0),SubmeshFaceId(5),SubmeshFaceId(1)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId((9223372036854775812u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId(0),SubmeshDirectedEdgeId((9223372036854775809u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(0),SubmeshFaceId(2),SubmeshFaceId(1)],edges:vec![SubmeshDirectedEdgeId(1),SubmeshDirectedEdgeId((9223372036854775810u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775814u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(0),SubmeshFaceId(2),SubmeshFaceId(1)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(1),SubmeshDirectedEdgeId((9223372036854775810u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775814u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(0),SubmeshFaceId(2),SubmeshFaceId(4)],edges:vec![SubmeshDirectedEdgeId(2),SubmeshDirectedEdgeId(3),SubmeshDirectedEdgeId((9223372036854775815u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(0),SubmeshFaceId(2),SubmeshFaceId(4)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(2),SubmeshDirectedEdgeId(3),SubmeshDirectedEdgeId((9223372036854775815u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(3),SubmeshFaceId(5),SubmeshFaceId(1)],edges:vec![SubmeshDirectedEdgeId(4),SubmeshDirectedEdgeId((9223372036854775817u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775813u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(3),SubmeshFaceId(5),SubmeshFaceId(1)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(4),SubmeshDirectedEdgeId((9223372036854775817u64-(1<<63)+(1<<31)) as u32),SubmeshDirectedEdgeId((9223372036854775813u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(2),SubmeshFaceId(3),SubmeshFaceId(1)],edges:vec![SubmeshDirectedEdgeId(5),SubmeshDirectedEdgeId(6),SubmeshDirectedEdgeId((9223372036854775816u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(2),SubmeshFaceId(3),SubmeshFaceId(1)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(5),SubmeshDirectedEdgeId(6),SubmeshDirectedEdgeId((9223372036854775816u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(2),SubmeshFaceId(3),SubmeshFaceId(4)],edges:vec![SubmeshDirectedEdgeId(7),SubmeshDirectedEdgeId(8),SubmeshDirectedEdgeId((9223372036854775818u64-(1<<63)+(1<<31)) as u32)]},
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(2),SubmeshFaceId(3),SubmeshFaceId(4)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(7),SubmeshDirectedEdgeId(8),SubmeshDirectedEdgeId((9223372036854775818u64-(1<<63)+(1<<31)) as u32)])},
|
||||||
VertRefs{faces:vec![SubmeshFaceId(4),SubmeshFaceId(3),SubmeshFaceId(5)],edges:vec![SubmeshDirectedEdgeId(10),SubmeshDirectedEdgeId(11),SubmeshDirectedEdgeId(9)]}
|
VertRefs{faces:Cow::Borrowed(&[SubmeshFaceId(4),SubmeshFaceId(3),SubmeshFaceId(5)]),edges:Cow::Borrowed(&[SubmeshDirectedEdgeId(10),SubmeshDirectedEdgeId(11),SubmeshDirectedEdgeId(9)])},
|
||||||
]
|
])
|
||||||
};
|
};
|
||||||
Self{
|
Self{
|
||||||
data,
|
data,
|
||||||
@ -388,10 +395,10 @@ impl TryFrom<&model::Mesh> for PhysicsMesh{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
PhysicsMeshTopology{
|
PhysicsMeshTopology{
|
||||||
faces:submesh_faces,
|
faces:submesh_faces.into(),
|
||||||
verts:submesh_verts,
|
verts:submesh_verts.into(),
|
||||||
face_topology:face_ref_guys.into_iter().map(|face_ref_guy|{
|
face_topology:face_ref_guys.into_iter().map(|face_ref_guy|{
|
||||||
FaceRefs{edges:face_ref_guy.0}
|
FaceRefs{edges:face_ref_guy.0.into()}
|
||||||
}).collect(),
|
}).collect(),
|
||||||
edge_topology:edge_pool.edge_guys.into_iter().map(|(edge_ref_verts,edge_ref_faces)|
|
edge_topology:edge_pool.edge_guys.into_iter().map(|(edge_ref_verts,edge_ref_faces)|
|
||||||
EdgeRefs{faces:edge_ref_faces.0,verts:edge_ref_verts.0}
|
EdgeRefs{faces:edge_ref_faces.0,verts:edge_ref_verts.0}
|
||||||
@ -406,7 +413,7 @@ impl TryFrom<&model::Mesh> for PhysicsMesh{
|
|||||||
}).collect();
|
}).collect();
|
||||||
Ok(Self{
|
Ok(Self{
|
||||||
data:PhysicsMeshData{
|
data:PhysicsMeshData{
|
||||||
faces,
|
faces:faces.into(),
|
||||||
verts,
|
verts,
|
||||||
},
|
},
|
||||||
complete_mesh:mesh_topologies.pop().ok_or(PhysicsMeshError::NoPhysicsGroups)?,
|
complete_mesh:mesh_topologies.pop().ok_or(PhysicsMeshError::NoPhysicsGroups)?,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user