X-Git-Url: http://git.localhorst.tv/?p=blobs.git;a=blobdiff_plain;f=src%2Fmath%2Fgeometry.hpp;h=6410ee013cb622f84879e3788dfd5dee8bb6d720;hp=4d1b07bbf2f1e93c61f97f5a6fbf685c56f6b724;hb=348143f5e41a5692ed7c8deab200f3c62f4395a2;hpb=237297d676d6841a35d320cc910a2d42aa9c13ef diff --git a/src/math/geometry.hpp b/src/math/geometry.hpp index 4d1b07b..6410ee0 100644 --- a/src/math/geometry.hpp +++ b/src/math/geometry.hpp @@ -35,6 +35,33 @@ bool Intersect( glm::dvec3 &normal, double &depth) noexcept; +class Ray { + +public: + Ray(const glm::dvec3 &orig, const glm::dvec3 &dir) + : orig(orig), dir(dir), inv_dir(1.0 / dir) { } + + void Origin(const glm::dvec3 &o) noexcept { orig = o; } + const glm::dvec3 &Origin() const noexcept { return orig; } + void Direction(const glm::dvec3 &d) noexcept { dir = d; inv_dir = 1.0 / d; } + const glm::dvec3 &Direction() const noexcept { return dir; } + const glm::dvec3 &InverseDirection() const noexcept { return inv_dir; } + +private: + glm::dvec3 orig; + glm::dvec3 dir; + glm::dvec3 inv_dir; + +}; + +/// oriented ray/box intersection test +bool Intersect( + const Ray &, + const AABB &, + const glm::dmat4 &M, + glm::dvec3 &normal, + double &dist) noexcept; + } }