libcruft-util/test/ray.cpp

75 lines
1.9 KiB
C++
Raw Normal View History

2015-03-07 03:20:50 +11:00
#include "aabb.hpp"
2015-04-13 16:45:56 +10:00
#include "debug.hpp"
#include "plane.hpp"
#include "ray.hpp"
#include "tap.hpp"
2015-02-19 13:28:56 +11:00
2015-03-07 03:20:50 +11:00
2015-04-13 21:47:37 +10:00
//-----------------------------------------------------------------------------
2015-03-07 03:20:50 +11:00
void
2015-04-13 21:47:37 +10:00
test_intersect_plane (util::TAP::logger &tap)
2015-02-19 13:28:56 +11:00
{
2015-03-11 22:31:35 +11:00
// trivial case: origin ray facing z, plane at unit z facing -z.
2015-04-13 21:47:37 +10:00
const util::ray3f l ({0,0,0}, {0,0, 1});
const util::plane3f p ({0,0,1}, {0,0,-1});
2015-02-19 13:28:56 +11:00
2015-04-13 21:47:37 +10:00
tap.expect_eq (l.intersect (p), 1.f, "ray-plane intersect");
2015-02-19 13:28:56 +11:00
}
2015-03-07 03:20:50 +11:00
2015-04-13 21:47:37 +10:00
//-----------------------------------------------------------------------------
2015-03-07 03:20:50 +11:00
void
2015-04-13 21:47:37 +10:00
test_intersect_aabb (util::TAP::logger &tap)
2015-03-07 03:20:50 +11:00
{
// trivial case: unit aabb at origin, ray from (0.5,-0.5) upwards
const util::AABB2f box {
2015-03-07 03:20:50 +11:00
{ 0.f, 0.f },
{ 1.f, 1.f }
};
const util::ray2f forward {
2015-03-07 03:20:50 +11:00
{ 0.5f, -0.5f },
{ 0.f, 1.f }
};
tap.expect_eq (forward.intersect (box), 0.5f, "ray-aabb intersect");
const util::ray2f behind {
{ 0.5f, 2.f },
{ 0.f, 1.f }
};
tap.expect_nan (behind.intersect (box), "ray-aabb intersect behind");
2015-03-07 03:20:50 +11:00
}
2015-04-13 21:47:37 +10:00
//-----------------------------------------------------------------------------
2015-04-13 16:45:56 +10:00
void
2015-04-13 21:47:37 +10:00
test_intersect_sphere (util::TAP::logger &tap)
2015-04-13 16:45:56 +10:00
{
2015-04-13 21:47:51 +10:00
const util::sphere3f s = {{0.f, 0.f, 0.f}, 1.f};
const util::ray3f r0 {{0.f, 2.f, 0.f}, {0.f, -1.f, 0.f}};
tap.expect_eq (r0.intersect (s), 1.f, "ray-sphere simple");
const util::ray3f r1 {{0.f, 1.f, 0.f}, {0.f, 1.f, 0.f}};
tap.expect_eq (r1.intersect (s), 0.f, "ray-sphere adjacent");
const util::ray3f r2 {{0.f, 2.f, 0.f}, {0.f, 1.f, 0.f}};
tap.expect_nan (r2.intersect (s), "ray-sphere no-intersect");
2015-04-13 16:45:56 +10:00
}
2015-04-13 21:47:37 +10:00
//-----------------------------------------------------------------------------
2015-03-07 03:20:50 +11:00
int
main (void)
{
2015-04-13 16:45:56 +10:00
util::TAP::logger tap;
2015-04-13 21:47:37 +10:00
test_intersect_plane (tap);
test_intersect_aabb (tap);
test_intersect_sphere (tap);
return tap.status ();
2015-03-07 03:20:50 +11:00
}