X-Git-Url: http://git.localhorst.tv/?p=blobs.git;a=blobdiff_plain;f=tst%2Fmath%2FIntersectTest.cpp;h=f428aaa59a585ce0f3a84f941ff8df12fe23b3e2;hp=cd5084574d8d3928fae03a50dd04f45314c47a04;hb=82c3e2c1e27f05b9617a4da8e4806ace7d38a5e1;hpb=659f83c800fb980b5c137e027dde3a099ab1a6d7 diff --git a/tst/math/IntersectTest.cpp b/tst/math/IntersectTest.cpp index cd50845..f428aaa 100644 --- a/tst/math/IntersectTest.cpp +++ b/tst/math/IntersectTest.cpp @@ -243,6 +243,35 @@ void IntersectTest::testRaySphereIntersection() { glm::dvec3(1.0, 0.0, 0.0), normal ); + ray.Origin({ 0.5, 0.0, 0.0 }); // a tad to the right + CPPUNIT_ASSERT_MESSAGE( + "ray does not intersect sphere at origin", + Intersect(ray, sphere, normal, dist) + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "distance along ray to unit sphere at origin is not 0.5", + 0.5, dist, epsilon + ); + AssertEqual( + "bad intersection normal", + glm::dvec3(1.0, 0.0, 0.0), normal + ); + + // corner case: ray origin exactly on sphere (should "intersect") + ray.Origin({ 1.0, 0.0, 0.0 }); + CPPUNIT_ASSERT_MESSAGE( + "ray touching sphere does not intersect it", + Intersect(ray, sphere, normal, dist) + ); + CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( + "distance along ray touching unit sphere is not 0.0", + 0.0, dist, epsilon + ); + AssertEqual( + "bad intersection normal", + glm::dvec3(1.0, 0.0, 0.0), normal + ); + ray.Origin({ 2.0, 0.0, 0.0 }); // move outside CPPUNIT_ASSERT_MESSAGE( "ray pointing away from sphere intersects it for some reason",