Initial commit
This commit is contained in:
62
test/math/ray.h
Normal file
62
test/math/ray.h
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <cxxtest/TestSuite.h>
|
||||
|
||||
#include "math/ray.h"
|
||||
|
||||
class RayTestSuite : public CxxTest::TestSuite {
|
||||
public:
|
||||
// Test Constructors
|
||||
void test_Ray() {
|
||||
Math::Ray r;
|
||||
|
||||
TS_ASSERT(r.getOrigin() == Math::Vector3d());
|
||||
TS_ASSERT(r.getDirection() == Math::Vector3d());
|
||||
|
||||
Math::Vector3d o(3, 2, 1);
|
||||
Math::Vector3d d(0, 1, 2);
|
||||
|
||||
Math::Ray r2(o, d);
|
||||
|
||||
TS_ASSERT(r2.getOrigin() == o);
|
||||
TS_ASSERT(r2.getDirection() == d);
|
||||
}
|
||||
|
||||
void test_translate() {
|
||||
Math::Vector3d o(3, 2, 1);
|
||||
Math::Vector3d d(0, 1, 2);
|
||||
Math::Ray r(o, d);
|
||||
|
||||
r.translate(Math::Vector3d(0.5f, 0.2f, 0.1f));
|
||||
TS_ASSERT(r.getDirection() == d);
|
||||
Math::Vector3d o2 = r.getOrigin();
|
||||
|
||||
TS_ASSERT_DELTA(o2.x(), 3.5, 0.0001);
|
||||
TS_ASSERT_DELTA(o2.y(), 2.2, 0.0001);
|
||||
TS_ASSERT_DELTA(o2.z(), 1.1, 0.0001);
|
||||
}
|
||||
|
||||
// TODO: Add tests for transform, rotate, rotateDirection, intersectAABB
|
||||
void test_intersectTriangle() {
|
||||
// A triangle that covers around the origin on the y plane.
|
||||
const Math::Vector3d v1(0, 0, -20);
|
||||
const Math::Vector3d v2(0, -10, 20);
|
||||
const Math::Vector3d v3(0, 10, 20);
|
||||
|
||||
// A ray that points along the x axis, should hit the triangle at the origin
|
||||
Math::Ray r(Math::Vector3d(-9.5f, 0, 0.7f), Math::Vector3d(1, 0, 0));
|
||||
|
||||
Math::Vector3d loc(7, 8, 9); // add values to ensure it's changed
|
||||
float dist = 99.0f;
|
||||
bool result = r.intersectTriangle(v1, v2, v3, loc, dist);
|
||||
// Should hit at the origin
|
||||
TS_ASSERT(result);
|
||||
TS_ASSERT_DELTA(dist, 9.5f, 0.0001);
|
||||
TS_ASSERT_DELTA(loc.x(), 0.0f, 0.0001);
|
||||
TS_ASSERT_DELTA(loc.y(), 0.0f, 0.0001);
|
||||
TS_ASSERT_DELTA(loc.z(), 0.7f, 0.0001);
|
||||
|
||||
// A ray that points along the x axis in the opposite direction, should never hit the triangle
|
||||
Math::Ray r2(Math::Vector3d(-1, 0, 0), Math::Vector3d(-1, 0, 0));
|
||||
result = r2.intersectTriangle(v1, v2, v3, loc, dist);
|
||||
TS_ASSERT(!result);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user