/* RayIntersector.h Written by Matthew Fisher Abstract interface for ray-triangle mesh intersections. */ class RayIntersector { public: struct Intersection { UINT FaceIndex; Vec3f Pt; }; struct RayIntersectionSorter { RayIntersectionSorter(const Vec3f &_BasePt) { BasePt = _BasePt; } bool operator() (const Intersection &L, const Intersection &R) { return (Vec3f::DistSq(L.Pt, BasePt) < Vec3f::DistSq(R.Pt, BasePt)); } Vec3f BasePt; }; void InitSingleMesh(const BaseMesh &M) { Vector Meshes; Meshes.PushEnd(&M); InitMeshList(Meshes); } virtual void InitMeshList(const Vector &Meshes) = 0; virtual void FindIntersections(const Ray3D &R, Vector &IntersectPts) const = 0; virtual bool FindFirstIntersection(const Ray3D &R, Intersection &Result, float &DistSq) const = 0; };