fix aabb normals + face_mesh

This commit is contained in:
Quaternions 2023-09-18 19:04:21 -07:00
parent 21dc425fc2
commit 2f0a073fd5

View File

@ -246,14 +246,20 @@ impl Model {
Aabb::unit_face_vertices(face) Aabb::unit_face_vertices(face)
} }
pub fn face_mesh(&self,face:TreyMeshFace) -> TreyMesh { pub fn face_mesh(&self,face:TreyMeshFace) -> TreyMesh {
let mut aabb=Aabb::new(); let mut aabb=self.mesh();
for &vertex in self.unit_face_vertices(face).iter() { //in this implementation face = worldspace aabb face
aabb.grow(glam::Vec4Swizzles::xyz(self.transform*vertex.extend(1.0))); match face {
AabbFace::Right => aabb.min.x=aabb.max.x,
AabbFace::Top => aabb.min.y=aabb.max.y,
AabbFace::Back => aabb.min.z=aabb.max.z,
AabbFace::Left => aabb.max.x=aabb.min.x,
AabbFace::Bottom => aabb.max.y=aabb.min.y,
AabbFace::Front => aabb.max.z=aabb.min.z,
} }
return aabb; return aabb;
} }
pub fn face_normal(&self,face:TreyMeshFace) -> glam::Vec3 { pub fn face_normal(&self,face:TreyMeshFace) -> glam::Vec3 {
glam::Vec4Swizzles::xyz(self.transform*Aabb::normal(face).extend(0.0))//this is wrong for scale glam::Vec4Swizzles::xyz(Aabb::normal(face).extend(0.0))//this is wrong for scale
} }
} }