From 67a167f237c3fbbffd82efb27b423b44c24404a6 Mon Sep 17 00:00:00 2001 From: Egor Yusov Date: Sun, 21 Jul 2019 09:36:39 -0700 Subject: Math lib: updated visibility test functions --- Common/interface/AdvancedMath.h | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'Common/interface') diff --git a/Common/interface/AdvancedMath.h b/Common/interface/AdvancedMath.h index 8ebf5e40..e610256f 100644 --- a/Common/interface/AdvancedMath.h +++ b/Common/interface/AdvancedMath.h @@ -171,7 +171,6 @@ enum class BoxVisibility FullyVisible }; -template inline BoxVisibility GetBoxVisibilityAgainstPlane(const Plane3D& Plane, const BoundBox &Box) { const float3& Normal = Plane.Normal; @@ -181,31 +180,23 @@ inline BoxVisibility GetBoxVisibilityAgainstPlane(const Plane3D& Plane, const Bo (Normal.y > 0) ? Box.Max.y : Box.Min.y, (Normal.z > 0) ? Box.Max.z : Box.Min.z ); - float DMax = dot( MaxPoint, Normal ) + Plane.Distance; - if( DMax < 0 ) return BoxVisibility::Invisible; - if (TestFullVisibility) - { - float3 MinPoint( - (Normal.x > 0) ? Box.Min.x : Box.Max.x, - (Normal.y > 0) ? Box.Min.y : Box.Max.y, - (Normal.z > 0) ? Box.Min.z : Box.Max.z - ); - - float DMin = dot(MinPoint, Normal) + Plane.Distance; - - if (DMin > 0) - return BoxVisibility::FullyVisible; - } + float3 MinPoint( + (Normal.x > 0) ? Box.Min.x : Box.Max.x, + (Normal.y > 0) ? Box.Min.y : Box.Max.y, + (Normal.z > 0) ? Box.Min.z : Box.Max.z + ); + float DMin = dot(MinPoint, Normal) + Plane.Distance; + if (DMin > 0) + return BoxVisibility::FullyVisible; return BoxVisibility::Intersecting; } // Tests if bounding box is visible by the camera -template inline BoxVisibility GetBoxVisibility(const ViewFrustum &ViewFrustum, const BoundBox &Box) { const Plane3D *pPlanes = reinterpret_cast(&ViewFrustum); @@ -214,7 +205,7 @@ inline BoxVisibility GetBoxVisibility(const ViewFrustum &ViewFrustum, const Boun for(int iViewFrustumPlane = 0; iViewFrustumPlane < 6; iViewFrustumPlane++) { const Plane3D &CurrPlane = pPlanes[iViewFrustumPlane]; - auto VisibilityAgainstPlane = GetBoxVisibilityAgainstPlane(CurrPlane, Box); + auto VisibilityAgainstPlane = GetBoxVisibilityAgainstPlane(CurrPlane, Box); // If bounding box is "behind" one of the planes, it is definitely invisible if (VisibilityAgainstPlane == BoxVisibility::Invisible) @@ -225,13 +216,12 @@ inline BoxVisibility GetBoxVisibility(const ViewFrustum &ViewFrustum, const Boun ++NumPlanesInside; } - return (TestFullVisibility && NumPlanesInside == 6) ? BoxVisibility::FullyVisible : BoxVisibility::Intersecting; + return (NumPlanesInside == 6) ? BoxVisibility::FullyVisible : BoxVisibility::Intersecting; } -template inline BoxVisibility GetBoxVisibility(const ViewFrustumExt &ViewFrustumExt, const BoundBox &Box) { - auto Visibility = GetBoxVisibility(static_cast(ViewFrustumExt), Box); + auto Visibility = GetBoxVisibility(static_cast(ViewFrustumExt), Box); if (Visibility == BoxVisibility::FullyVisible || Visibility == BoxVisibility::Invisible) return Visibility; -- cgit v1.2.3