#include "../Tests.hpp" #include "core/math/Frustum.hpp" using V3 = Core::Vector3; static void testToString() { Core::Frustum f(60.0f, 0.1f, 1000.0f); CORE_TEST_STRING("(tan = 0.58, nearClip = 0.10, farClip = 1000.00)", f); } static void testPointIsInside() { Core::IntVector2 size(200, 100); Core::Frustum f(60.0f, 0.1f, 1000.0f); f.updatePlanes(V3(0.0f, 0.0f, 0.0f), V3(1.0f, 0.0f, 0.0f), V3(0.0f, 1.0f, 0.0f), V3(0.0f, 0.0f, 1.0f), size); CORE_TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f))); CORE_TEST_FALSE(f.isInside(V3(0.0f, 0.0f, 1004.0f))); CORE_TEST_FALSE(f.isInside(V3(0.0f, 0.0f, -5.0f))); CORE_TEST_FALSE(f.isInside(V3(0.0f, 50.0f, 5.0f))); CORE_TEST_FALSE(f.isInside(V3(0.0f, -50.0f, 5.0f))); CORE_TEST_FALSE(f.isInside(V3(50.0f, 0.0f, 5.0f))); CORE_TEST_FALSE(f.isInside(V3(-50.0f, 0.0f, 5.0f))); } static void testSphereIsInside() { Core::IntVector2 size(200, 100); Core::Frustum f(60.0f, 0.1f, 1000.0f); f.updatePlanes(V3(0.0f, 0.0f, 0.0f), V3(1.0f, 0.0f, 0.0f), V3(0.0f, 1.0f, 0.0f), V3(0.0f, 0.0f, 1.0f), size); CORE_TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(0.0f, 0.0f, 1004.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(0.0f, 0.0f, -5.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(0.0f, 50.0f, 5.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(0.0f, -50.0f, 5.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(50.0f, 0.0f, 5.0f), 3.0f)); CORE_TEST_FALSE(f.isInside(V3(-50.0f, 0.0f, 5.0f), 3.0f)); CORE_TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f), 3.0f)); CORE_TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 1004.0f), 50.0f)); CORE_TEST_TRUE(f.isInside(V3(0.0f, 0.0f, -5.0f), 50.0f)); CORE_TEST_TRUE(f.isInside(V3(0.0f, 50.0f, 5.0f), 50.0f)); CORE_TEST_TRUE(f.isInside(V3(0.0f, -50.0f, 5.0f), 50.0f)); CORE_TEST_TRUE(f.isInside(V3(50.0f, 0.0f, 5.0f), 50.0f)); CORE_TEST_TRUE(f.isInside(V3(-50.0f, 0.0f, 5.0f), 50.0f)); } static void testUpdateProjection() { Core::Frustum f(60.0f, 0.1f, 1000.0f); CORE_TEST_STRING("[[1.30, 0.00, 0.00, 0.00], " "[0.00, 1.73, 0.00, 0.00], " "[0.00, 0.00, -1.00, -0.20], " "[0.00, 0.00, -1.00, 0.00]]", f.updateProjection(Core::IntVector2(400, 300))); } void Core::testFrustum() { testToString(); testPointIsInside(); testSphereIsInside(); testUpdateProjection(); }