summaryrefslogtreecommitdiffstats
path: root/Common/interface
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-07-21 16:36:39 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-07-21 16:36:39 +0000
commit67a167f237c3fbbffd82efb27b423b44c24404a6 (patch)
treed85a6060285a535799bd95997f39b6e1e757d417 /Common/interface
parentFixed formatting (diff)
downloadDiligentCore-67a167f237c3fbbffd82efb27b423b44c24404a6.tar.gz
DiligentCore-67a167f237c3fbbffd82efb27b423b44c24404a6.zip
Math lib: updated visibility test functions
Diffstat (limited to 'Common/interface')
-rw-r--r--Common/interface/AdvancedMath.h32
1 files changed, 11 insertions, 21 deletions
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<bool TestFullVisibility>
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<bool TestFullVisibility>
inline BoxVisibility GetBoxVisibility(const ViewFrustum &ViewFrustum, const BoundBox &Box)
{
const Plane3D *pPlanes = reinterpret_cast<const Plane3D*>(&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<TestFullVisibility>(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<bool TestFullVisibility>
inline BoxVisibility GetBoxVisibility(const ViewFrustumExt &ViewFrustumExt, const BoundBox &Box)
{
- auto Visibility = GetBoxVisibility<TestFullVisibility>(static_cast<const ViewFrustum&>(ViewFrustumExt), Box);
+ auto Visibility = GetBoxVisibility(static_cast<const ViewFrustum&>(ViewFrustumExt), Box);
if (Visibility == BoxVisibility::FullyVisible || Visibility == BoxVisibility::Invisible)
return Visibility;