deargui-vpl/ref/virtools/Includes/VxIntersect.h

120 lines
6.9 KiB
C++

/*************************************************************************/
/* File : VxIntersect.h */
/* Author : Aymeric Bard */
/* */
/* Virtools SDK */
/* Copyright (c) Virtools 2000, All Rights Reserved. */
/*************************************************************************/
#ifndef VXINTERSECT_H
#define VXINTERSECT_H
class VxFrustum;
/**********************************************************
Name: VxIntersect
Summary: Static methods for intersection tests.
Remarks: VxIntersect class contains a list of static methods useful for miscellaneous intersection tests.
Using these methods one can test intersection of ray,segment or line with a Box,infinite planes, triangle faces
or Sphere. Methods for box-box (Boxes) and plane-plane (Planes) intersction are also provided
See Also : VxPlane,VxRay,VxBbox,VxVector,Intersections
*********************************************************/
class VxIntersect
{
public:
//----------- Boxes
// Intersection Ray - Box (return -1 if origin inside)
VX_EXPORT static BOOL RayBox(const VxRay& ray,const VxBbox& box);
VX_EXPORT static BOOL RayBox(const VxRay& ray,const VxBbox& box,VxVector& inpoint,VxVector* outpoint = NULL,VxVector* innormal = NULL,VxVector* outnormal = NULL);
// Intersection Segment - Box (return -1 if origin inside)
VX_EXPORT static BOOL SegmentBox(const VxRay& ray,const VxBbox& box);
VX_EXPORT static BOOL SegmentBox(const VxRay& ray,const VxBbox& box,VxVector& inpoint,VxVector* outpoint = NULL,VxVector* innormal = NULL,VxVector* outnormal = NULL);
// Intersection Line - Box
VX_EXPORT static BOOL LineBox(const VxRay& ray,const VxBbox& box);
VX_EXPORT static BOOL LineBox(const VxRay& ray,const VxBbox& box,VxVector& inpoint,VxVector* outpoint = NULL,VxVector* innormal = NULL,VxVector* outnormal = NULL);
// Intersection Box - Box
VX_EXPORT static BOOL AABBAABB(const VxBbox& box1, const VxBbox& box2);
VX_EXPORT static BOOL AABBOBB(const VxBbox& box1, const VxOBB& box2);
VX_EXPORT static BOOL OBBOBB(const VxOBB& box1, const VxOBB& box2);
VX_EXPORT static BOOL AABBFace(const VxBbox& box1, const VxVector& A0,const VxVector& A1,const VxVector& A2, const VxVector& N);
//---------- Planes
// Intersection Ray - Plane
VX_EXPORT static BOOL RayPlane(const VxRay& ray,const VxPlane& plane,VxVector& point,float& dist);
VX_EXPORT static BOOL RayPlaneCulled(const VxRay& ray,const VxPlane& plane,VxVector& point,float& dist);
// Intersection Segment - Plane
VX_EXPORT static BOOL SegmentPlane(const VxRay& ray,const VxPlane& plane,VxVector& point,float& dist);
VX_EXPORT static BOOL SegmentPlaneCulled(const VxRay& ray,const VxPlane& plane,VxVector& point,float& dist);
// Intersection Line - Plane
VX_EXPORT static BOOL LinePlane(const VxRay& ray,const VxPlane& plane,VxVector& point,float& dist);
// Intersection Box - Plane
VX_EXPORT static BOOL BoxPlane(const VxBbox& box,const VxPlane& plane);
// Intersection Box - Plane
VX_EXPORT static BOOL BoxPlane(const VxBbox& box,const VxMatrix& mat, const VxPlane& plane);
// Intersection Box - Plane
VX_EXPORT static BOOL FacePlane(const VxVector& A0,const VxVector& A1,const VxVector& A2,const VxPlane& plane);
// Intersection of 3 Planes
VX_EXPORT static BOOL Planes(const VxPlane& plane1,const VxPlane& plane2,const VxPlane& plane3,VxVector& p);
//---------- Faces
// Is a point is inside the boundary of a face (the point is not checked againt the face/plane insides)
VX_EXPORT static BOOL PointInFace(const VxVector& point,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,int& i1,int& i2);
// Intersection Ray - Face
VX_EXPORT static BOOL RayFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist);
VX_EXPORT static BOOL RayFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist,int& i1,int& i2);
VX_EXPORT static BOOL RayFaceCulled(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist,int& i1,int& i2);
// Intersection Segment - Face
VX_EXPORT static BOOL SegmentFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist);
VX_EXPORT static BOOL SegmentFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist,int& i1,int& i2);
VX_EXPORT static BOOL SegmentFaceCulled(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist,int& i1,int& i2);
// Intersection Line - Face
VX_EXPORT static BOOL LineFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist);
VX_EXPORT static BOOL LineFace(const VxRay &ray,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const VxVector& norm,VxVector& res,float& dist,int& i1,int& i2);
// Foe a given point inside a face return the coefficient for each face vertex to interpolate normal or uv data ( pt.uv = pt0.uv * V0Coef + pt1.uv * V1Coef + pt2.uv * V2Coef
VX_EXPORT static void GetPointCoefficients(const VxVector& pt,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2,const int& i1,const int& i2,float& V0Coef,float& V1Coef,float& V2Coef);
// Intersection Face - Face
VX_EXPORT static BOOL FaceFace(const VxVector& A0,const VxVector& A1,const VxVector& A2,const VxVector& N0,const VxVector& B0,const VxVector& B1,const VxVector& B2,const VxVector& N1);
//--------- Frustum
// Intersection Ray - Face
VX_EXPORT static BOOL FrustumFace(const VxFrustum& frustum,const VxVector& pt0,const VxVector& pt1,const VxVector& pt2);
// Intersection Ray - Face
VX_EXPORT static BOOL FrustumAABB(const VxFrustum& frustum,const VxBbox& box);
// Intersection Frustum - Box
VX_EXPORT static BOOL FrustumOBB(const VxFrustum& frustum,const VxBbox& box,const VxMatrix& mat);
// Intersection Frustum - Box
VX_EXPORT static BOOL FrustumBox(const VxFrustum& frustum,const VxBbox& box,const VxMatrix& mat);
//--------- Spheres
VX_EXPORT static BOOL SphereSphere(const VxSphere& iS1, const VxVector& iP1, const VxSphere& iS2, const VxVector& iP2, float* oCollisionTime1, float* oCollisionTime2);
// Intersection Ray - Sphere
VX_EXPORT static int RaySphere(const VxRay &iRay,const VxSphere& iSphere,VxVector* oInter1,VxVector* oInter2);
// Intersection Ray - Sphere returns the number of intersection(s) of a ray on the sphere (0,1 or 2)
VX_EXPORT static int SphereAABB(const VxSphere& iSphere,const VxBbox& iBox);
/*
// Intersection Segment - Sphere
VX_EXPORT static BOOL SegmentSphere(VxRay &ray,const VxVector& radius,const VxVector& norm,VxVector& point,float& dist);
// Intersection Line - Sphere
VX_EXPORT static BOOL LineSphere(VxRay &ray,const VxVector& radius,const VxVector& norm,VxVector& point,float& dist);
*/
};
#endif