bool BoxCollider::Fits( const BoxCollider &AABB ) const { bool xAxis = ( Min().x <= AABB.Min().x && Max().x >= AABB.Max().x); bool yAxis = ( Min().y <= AABB.Min().y && Max().y >= AABB.Max().y); bool zAxis = ( Min().z <= AABB.Min().z && Max().z >= AABB.Max().z); return xAxis && yAxis && zAxis; }
void ClosestPtToAABB( glm::vec3& p, const BoxCollider& AABB ) { glm::vec3 min = AABB.Min(); glm::vec3 max = AABB.Max(); glm::clamp( p.x, min.x, max.x ); glm::clamp( p.y, min.y, max.y ); glm::clamp( p.z, min.z, max.z ); }
float SqrDistPointAABB( glm::vec3 &point, const BoxCollider &AABB ) { float sqrDist( 0.0f); glm::vec3 min = AABB.Min(); glm::vec3 max = AABB.Max(); if (point.x < min.x) sqrDist += ( min.x - point.x) * ( min.x - point.x); if (point.x > max.x) sqrDist += ( point.x - max.x) * ( point.x - max.x); if (point.y < min.y) sqrDist += ( min.y - point.y) * ( min.y - point.y); if (point.y > max.y) sqrDist += ( point.y - max.y) * ( point.y - max.y); if (point.z < min.z) sqrDist += ( min.z - point.z) * ( min.z - point.z); if (point.z > max.z) sqrDist += ( point.z - max.z) * ( point.z - max.z); return sqrDist; }