test: add tests for camera view-frustum culling planes

This commit is contained in:
dualfroz committed 2026-08-27 14:30:27 +02:00
1 parent 5e81d6b1af
commit 13b0089e8d
1 file changed
+47
+47
View File
@@ -0,0 +1,47 @@
#include "testHarness.h"
#include "vf/Frustum.h"
using namespace vf;
namespace {
Frustum makeFrustum() {
Mat4 proj = perspective(1.0472f, 1.3333f, 0.1f, 100.0f); // 60 degrees
Mat4 view = lookAt({0, 0, 5}, {0, 0, 0}, {0, 1, 0}); // camera looks toward -z
return Frustum::fromMatrix(proj * view);
}
} // namespace
VF_TEST(frustumPointInFrontIsVisible) {
Frustum f = makeFrustum();
CHECK(f.containsPoint({0, 0, 0}));
CHECK(f.containsPoint({0, 0, -10}));
}
VF_TEST(frustumPointBehindCameraIsCulled) {
Frustum f = makeFrustum();
CHECK(!f.containsPoint({0, 0, 10}));
}
VF_TEST(frustumPointBeyondFarIsCulled) {
Frustum f = makeFrustum();
CHECK(!f.containsPoint({0, 0, -200}));
}
VF_TEST(frustumWideOffAxisPointIsCulled) {
Frustum f = makeFrustum();
CHECK(!f.containsPoint({100, 0, -1}));
}
VF_TEST(frustumAabbInViewIntersects) {
Frustum f = makeFrustum();
Aabb box{{-1, -1, -2}, {1, 1, 0}};
CHECK(f.intersectsAabb(box));
}
VF_TEST(frustumAabbBehindCameraCulled) {
Frustum f = makeFrustum();
Aabb box{{-1, -1, 20}, {1, 1, 22}};
CHECK(!f.intersectsAabb(box));
}