FrustumTests.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "../Tests.hpp"
  2. #include "core/Frustum.hpp"
  3. #include "core/Test.hpp"
  4. #define R60 Core::degreeToRadian(60.0f)
  5. using V3 = Core::Vector3;
  6. static void testPointIsInside() {
  7. Core::IntVector2 size(200, 100);
  8. Core::Frustum f(R60, 0.1f, 1000.0f);
  9. f.updatePlanes(V3(0, 0, 0), V3(1, 0, 0), V3(0, 1, 0), V3(0, 0, 1), size);
  10. TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f)));
  11. TEST_FALSE(f.isInside(V3(0.0f, 0.0f, 1004.0f)));
  12. TEST_FALSE(f.isInside(V3(0.0f, 0.0f, -5.0f)));
  13. TEST_FALSE(f.isInside(V3(0.0f, 50.0f, 5.0f)));
  14. TEST_FALSE(f.isInside(V3(0.0f, -50.0f, 5.0f)));
  15. TEST_FALSE(f.isInside(V3(50.0f, 0.0f, 5.0f)));
  16. TEST_FALSE(f.isInside(V3(-50.0f, 0.0f, 5.0f)));
  17. }
  18. static void testSphereIsInside() {
  19. Core::IntVector2 size(200, 100);
  20. Core::Frustum f(R60, 0.1f, 1000.0f);
  21. f.updatePlanes(V3(0, 0, 0), V3(1, 0, 0), V3(0, 1, 0), V3(0, 0, 1), size);
  22. TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f), 3.0f));
  23. TEST_FALSE(f.isInside(V3(0.0f, 0.0f, 1004.0f), 3.0f));
  24. TEST_FALSE(f.isInside(V3(0.0f, 0.0f, -5.0f), 3.0f));
  25. TEST_FALSE(f.isInside(V3(0.0f, 50.0f, 5.0f), 3.0f));
  26. TEST_FALSE(f.isInside(V3(0.0f, -50.0f, 5.0f), 3.0f));
  27. TEST_FALSE(f.isInside(V3(50.0f, 0.0f, 5.0f), 3.0f));
  28. TEST_FALSE(f.isInside(V3(-50.0f, 0.0f, 5.0f), 3.0f));
  29. TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 5.0f), 3.0f));
  30. TEST_TRUE(f.isInside(V3(0.0f, 0.0f, 1004.0f), 50.0f));
  31. TEST_TRUE(f.isInside(V3(0.0f, 0.0f, -5.0f), 50.0f));
  32. TEST_TRUE(f.isInside(V3(0.0f, 50.0f, 5.0f), 50.0f));
  33. TEST_TRUE(f.isInside(V3(0.0f, -50.0f, 5.0f), 50.0f));
  34. TEST_TRUE(f.isInside(V3(50.0f, 0.0f, 5.0f), 50.0f));
  35. TEST_TRUE(f.isInside(V3(-50.0f, 0.0f, 5.0f), 50.0f));
  36. }
  37. static void testUpdateProjection() {
  38. Core::Frustum f(R60, 0.1f, 1000.0f);
  39. TEST_STRING(
  40. "[[1.30, 0.00, 0.00, 0.00], "
  41. "[0.00, 1.73, 0.00, 0.00], "
  42. "[0.00, 0.00, -1.00, -0.20], "
  43. "[0.00, 0.00, -1.00, 0.00]]",
  44. f.updateProjection(Core::IntVector2(400, 300)));
  45. }
  46. void testFrustum() {
  47. testPointIsInside();
  48. testSphereIsInside();
  49. testUpdateProjection();
  50. }