use bvh::{aabb::Aabb, bvh::Bvh}; use nalgebra::{ClosedAdd, ClosedMul, ClosedSub, Scalar, SimdPartialOrd}; use num::{Float, FromPrimitive}; use super::triangle::Triangle; #[derive(Debug)] pub struct Mesh { pub aabb: Aabb, pub bvh: Bvh, pub triangles: Vec>, } impl From>> for Mesh where T: SimdPartialOrd + Scalar + Copy + ClosedMul + ClosedAdd + ClosedSub + Float + FromPrimitive, { fn from(mut triangles: Vec>) -> Self { Self { aabb: triangles .get(0) .map(|triangle| { let mut aabb = triangle.aabb; for triangle in triangles.iter().skip(1) { aabb.join_mut(&triangle.aabb); } aabb }) .unwrap_or_else(|| Aabb::empty()), bvh: Bvh::build(&mut triangles), triangles, } } }