示例#1
0
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;
}
示例#2
0
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 );
}
示例#3
0
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;
}