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