Merge branch 'development' into cmake/SPEC-7179

This commit is contained in:
Esteban Papp
2021-07-19 15:48:29 -07:00
66 changed files with 572 additions and 1755 deletions
@@ -130,7 +130,11 @@ namespace AZ
//So for each plane, we can test compare the center-to-plane distance to this interval to see which side of the plane the AABB is on.
//The AABB is not overlapping if it is fully behind any of the planes, otherwise it is overlapping.
const Vector3 center = aabb.GetCenter();
const Vector3 extents = 0.5f * aabb.GetExtents();
//If the AABB contains FLT_MAX at either (or both) extremes, it would be easy to overflow here by using "0.5f * GetExtents()"
//or "0.5f * (GetMax() - GetMin())". By separating into two separate multiplies before the subtraction, we can ensure
//that we don't overflow.
const Vector3 extents = (0.5f * aabb.GetMax()) - (0.5f * aabb.GetMin());
for (Frustum::PlaneId planeId = Frustum::PlaneId::Near; planeId < Frustum::PlaneId::MAX; ++planeId)
{
@@ -42,6 +42,7 @@ namespace UnitTest
AZ::Aabb unitBox = AZ::Aabb::CreateCenterHalfExtents(AZ::Vector3::CreateZero(), AZ::Vector3(1.f, 1.f, 1.f));
AZ::Aabb aabb = AZ::Aabb::CreateCenterHalfExtents(AZ::Vector3(10.f, 10.f, 10.f), AZ::Vector3(1.f, 1.f, 1.f));
AZ::Aabb aabb1 = AZ::Aabb::CreateCenterHalfExtents(AZ::Vector3(10.f, 10.f, 10.f), AZ::Vector3(100.f, 100.f, 100.f));
AZ::Aabb maxSizeAabb = AZ::Aabb::CreateFromMinMax(AZ::Vector3(-AZ::Constants::FloatMax), AZ::Vector3(AZ::Constants::FloatMax));
AZ::Vector3 point(0.f, 0.f, 0.f);
AZ::Vector3 point1(10.f, 10.f, 10.f);
@@ -73,6 +74,10 @@ namespace UnitTest
EXPECT_TRUE(AZ::ShapeIntersection::Overlaps(frustum, aabb1));
EXPECT_TRUE(AZ::ShapeIntersection::Overlaps(sphere1, far_value));
// Verify that an AABB that covers the max floating point range successfully overlaps with a frustum and doesn't hit any
// floating-point math overflows.
EXPECT_TRUE(AZ::ShapeIntersection::Overlaps(frustum, maxSizeAabb));
EXPECT_FALSE(AZ::ShapeIntersection::Overlaps(frustum, aabb));
EXPECT_FALSE(AZ::ShapeIntersection::Overlaps(unitSphere, aabb));
EXPECT_FALSE(AZ::ShapeIntersection::Overlaps(unitSphere, sphere2));