]> git.localhorst.tv Git - blobs.git/blobdiff - src/math/geometry.hpp
add ray/box intersect test
[blobs.git] / src / math / geometry.hpp
index 4d1b07bbf2f1e93c61f97f5a6fbf685c56f6b724..6410ee013cb622f84879e3788dfd5dee8bb6d720 100644 (file)
@@ -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;
+
 }
 }