diff --git a/include/Engine/Core/Collision.h b/include/Engine/Core/Collision.h index bbcad66e..67a9e808 100644 --- a/include/Engine/Core/Collision.h +++ b/include/Engine/Core/Collision.h @@ -3,13 +3,14 @@ #include "Core/Ray.h" #include "Core/AABB.h" -#include namespace Collision { bool RayAABBIntr(const Ray& ray, const AABB& box); bool RayVsAABB(const Ray& ray, const AABB& box); +bool RayVsAABB(const Ray& ray, const AABB& box, float& outDistance); + } #endif \ No newline at end of file diff --git a/src/Engine/Core/Collision.cpp b/src/Engine/Core/Collision.cpp index bce61aeb..fda895a4 100644 --- a/src/Engine/Core/Collision.cpp +++ b/src/Engine/Core/Collision.cpp @@ -32,6 +32,12 @@ bool RayAABBIntr(const Ray& ray, const AABB& box) } bool RayVsAABB(const Ray& ray, const AABB& box) +{ + float dummy; + return RayVsAABB(ray, box, dummy); +} + +bool RayVsAABB(const Ray& ray, const AABB& box, float& outDistance) { glm::vec3 invdir = 1.0f / ray.Direction; @@ -48,6 +54,7 @@ bool RayVsAABB(const Ray& ray, const AABB& box) if (tmax < 0 || tmin > tmax) return false; + outDistance = (tmin > 0) ? tmin : tmax; return true; } diff --git a/src/Tests/CollisionTest.cpp b/src/Tests/CollisionTest.cpp index 426b9722..c8260e39 100644 --- a/src/Tests/CollisionTest.cpp +++ b/src/Tests/CollisionTest.cpp @@ -2,6 +2,8 @@ using boost::unit_test_framework::test_suite; using boost::unit_test_framework::test_case; #include +#include "Engine/Core/AABB.h" +#include "Engine/Core/Ray.h" #include //srand BOOST_AUTO_TEST_SUITE(collisionTests) @@ -10,8 +12,8 @@ BOOST_AUTO_TEST_CASE(collisionTest) { //fixed seed srand(2); - Collision::Ray ray; - Collision::AABB someAABB; + Ray ray; + AABB someAABB; glm::vec3 minPos; glm::vec3 maxPos; bool z; @@ -31,7 +33,7 @@ BOOST_AUTO_TEST_CASE(collisionTest) maxPos.y = rand() % 100; maxPos.z = rand() % 100; - someAABB = Collision::AABB(minPos, maxPos); + someAABB = AABB(minPos, maxPos); z = Collision::RayVsAABB(ray, someAABB); if (z) ++test; } @@ -42,8 +44,8 @@ BOOST_AUTO_TEST_CASE(collisionTest2) { //fixed seed srand(2); - Collision::Ray ray; - Collision::AABB someAABB; + Ray ray; + AABB someAABB; glm::vec3 minPos; glm::vec3 maxPos; bool z; @@ -63,7 +65,7 @@ BOOST_AUTO_TEST_CASE(collisionTest2) maxPos.y = rand() % 100; maxPos.z = rand() % 100; - someAABB = Collision::AABB(minPos, maxPos); + someAABB = AABB(minPos, maxPos); z = Collision::RayAABBIntr(ray, someAABB); if (z) ++test; } diff --git a/src/Tests/ObjectPoolTest.cpp b/src/Tests/ObjectPoolTest.cpp index adea33eb..e136da70 100644 --- a/src/Tests/ObjectPoolTest.cpp +++ b/src/Tests/ObjectPoolTest.cpp @@ -1,7 +1,7 @@ #include using boost::unit_test_framework::test_suite; using boost::unit_test_framework::test_case; -#include "../wmem/MemPrototype/ObjectPool.h" +#include "Engine/Core/ObjectPool.h" #include struct S