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
|