FrustumTests.cpp 2.2 KB

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