#pragma once #include "vde/core/point.h" #include "vde/core/line.h" #include "vde/core/triangle.h" #include namespace vde::collision { struct RayTriResult { double t; // parameter along ray double u, v; // barycentric Point3D point; }; /// Möller–Trumbore ray-triangle intersection std::optional ray_triangle_intersect( const Point3D& origin, const Vector3D& dir, const Triangle3D& tri); inline std::optional ray_triangle_intersect( const Ray3Dd& ray, const Triangle3D& tri) { return ray_triangle_intersect(ray.origin(), ray.direction(), tri); } } // namespace vde::collision