1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
use na::{self, Real}; use utils::IsometryOps; use bounding_volume::{HasBoundingVolume, AABB}; use shape::Compound; use math::Isometry; impl<N: Real> HasBoundingVolume<N, AABB<N>> for Compound<N> { #[inline] fn bounding_volume(&self, m: &Isometry<N>) -> AABB<N> { let bv = self.bvt().root_bounding_volume().unwrap(); let ls_center = bv.center(); let center = m * ls_center; let half_extents = (*bv.maxs() - *bv.mins()) / na::convert::<f64, N>(2.0); let ws_half_extents = m.absolute_transform_vector(&half_extents); AABB::new(center + (-ws_half_extents), center + ws_half_extents) } }