#include <GJKClosestPoint.h>
 | 
| template<typename A , typename B >  | 
| bool  | Intersects (const A &inA, const B &inB, float inTolerance, Vec3 &ioV) | 
|   | 
| template<typename A , typename B >  | 
| float  | GetClosestPoints (const A &inA, const B &inB, float inTolerance, float inMaxDistSq, Vec3 &ioV, Vec3 &outPointA, Vec3 &outPointB) | 
|   | 
| void  | GetClosestPointsSimplex (Vec3 *outY, Vec3 *outP, Vec3 *outQ, uint &outNumPoints) const | 
|   | 
| template<typename A >  | 
| bool  | CastRay (Vec3Arg inRayOrigin, Vec3Arg inRayDirection, float inTolerance, const A &inA, float &ioLambda) | 
|   | 
| template<typename A , typename B >  | 
| bool  | CastShape (Mat44Arg inStart, Vec3Arg inDirection, float inTolerance, const A &inA, const B &inB, float &ioLambda) | 
|   | 
| template<typename A , typename B >  | 
| bool  | CastShape (Mat44Arg inStart, Vec3Arg inDirection, float inTolerance, const A &inA, const B &inB, float inConvexRadiusA, float inConvexRadiusB, float &ioLambda, Vec3 &outPointA, Vec3 &outPointB, Vec3 &outSeparatingAxis) | 
|   | 
|   | NonCopyable ()=default | 
|   | 
|   | NonCopyable (const NonCopyable &)=delete | 
|   | 
| void  | operator= (const NonCopyable &)=delete | 
|   | 
Convex vs convex collision detection Based on: A Fast and Robust GJK Implementation for Collision Detection of Convex Objects - Gino van den Bergen 
 
◆ CastRay()
template<typename A > 
  
  
      
        
          | bool GJKClosestPoint::CastRay  | 
          ( | 
          Vec3Arg  | 
          inRayOrigin,  | 
         
        
           | 
           | 
          Vec3Arg  | 
          inRayDirection,  | 
         
        
           | 
           | 
          float  | 
          inTolerance,  | 
         
        
           | 
           | 
          const A &  | 
          inA,  | 
         
        
           | 
           | 
          float &  | 
          ioLambda  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inline   | 
  
 
Test if a ray inRayOrigin + lambda * inRayDirection for lambda e [0, ioLambda> intersects inA
Code based upon: Ray Casting against General Convex Objects with Application to Continuous Collision Detection - Gino van den Bergen
- Parameters
 - 
  
    | inRayOrigin | Origin of the ray  | 
    | inRayDirection | Direction of the ray (ioLambda * inDirection determines length)  | 
    | inTolerance | The minimal distance between the ray and A before it is considered colliding  | 
    | inA | A convex object that has the GetSupport(Vec3) function  | 
    | ioLambda | The max fraction along the ray, on output updated with the actual collision fraction. | 
  
   
- Returns
 - true if a hit was found, ioLambda is the solution for lambda. 
 
 
 
◆ CastShape() [1/2]
template<typename A , typename B > 
  
  
      
        
          | bool GJKClosestPoint::CastShape  | 
          ( | 
          Mat44Arg  | 
          inStart,  | 
         
        
           | 
           | 
          Vec3Arg  | 
          inDirection,  | 
         
        
           | 
           | 
          float  | 
          inTolerance,  | 
         
        
           | 
           | 
          const A &  | 
          inA,  | 
         
        
           | 
           | 
          const B &  | 
          inB,  | 
         
        
           | 
           | 
          float &  | 
          ioLambda  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inline   | 
  
 
Test if a cast shape inA moving from inStart to lambda * inStart.GetTranslation() + inDirection where lambda e [0, ioLambda> intersects inB
- Parameters
 - 
  
    | inStart | Start position and orientation of the convex object  | 
    | inDirection | Direction of the sweep (ioLambda * inDirection determines length)  | 
    | inTolerance | The minimal distance between A and B before they are considered colliding  | 
    | inA | The convex object A, must support the GetSupport(Vec3) function.  | 
    | inB | The convex object B, must support the GetSupport(Vec3) function.  | 
    | ioLambda | The max fraction along the sweep, on output updated with the actual collision fraction. | 
  
   
- Returns
 - true if a hit was found, ioLambda is the solution for lambda. 
 
 
 
◆ CastShape() [2/2]
template<typename A , typename B > 
  
  
      
        
          | bool GJKClosestPoint::CastShape  | 
          ( | 
          Mat44Arg  | 
          inStart,  | 
         
        
           | 
           | 
          Vec3Arg  | 
          inDirection,  | 
         
        
           | 
           | 
          float  | 
          inTolerance,  | 
         
        
           | 
           | 
          const A &  | 
          inA,  | 
         
        
           | 
           | 
          const B &  | 
          inB,  | 
         
        
           | 
           | 
          float  | 
          inConvexRadiusA,  | 
         
        
           | 
           | 
          float  | 
          inConvexRadiusB,  | 
         
        
           | 
           | 
          float &  | 
          ioLambda,  | 
         
        
           | 
           | 
          Vec3 &  | 
          outPointA,  | 
         
        
           | 
           | 
          Vec3 &  | 
          outPointB,  | 
         
        
           | 
           | 
          Vec3 &  | 
          outSeparatingAxis  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inline   | 
  
 
Test if a cast shape inA moving from inStart to lambda * inStart.GetTranslation() + inDirection where lambda e [0, ioLambda> intersects inB
- Parameters
 - 
  
    | inStart | Start position and orientation of the convex object  | 
    | inDirection | Direction of the sweep (ioLambda * inDirection determines length)  | 
    | inTolerance | The minimal distance between A and B before they are considered colliding  | 
    | inA | The convex object A, must support the GetSupport(Vec3) function.  | 
    | inB | The convex object B, must support the GetSupport(Vec3) function.  | 
    | inConvexRadiusA | The convex radius of A, this will be added on all sides to pad A.  | 
    | inConvexRadiusB | The convex radius of B, this will be added on all sides to pad B.  | 
    | ioLambda | The max fraction along the sweep, on output updated with the actual collision fraction.  | 
    | outPointA | is the contact point on A (if outSeparatingAxis is near zero, this may not be not the deepest point)  | 
    | outPointB | is the contact point on B (if outSeparatingAxis is near zero, this may not be not the deepest point)  | 
    | outSeparatingAxis | On return this will contain a vector that points from A to B along the smallest distance of separation. The length of this vector indicates the separation of A and B without their convex radius. If it is near zero, the direction may not be accurate as the bodies may overlap when lambda = 0. | 
  
   
- Returns
 - true if a hit was found, ioLambda is the solution for lambda and outPoint and outSeparatingAxis are valid. 
 
 
 
◆ GetClosestPoints()
template<typename A , typename B > 
  
  
      
        
          | float GJKClosestPoint::GetClosestPoints  | 
          ( | 
          const A &  | 
          inA,  | 
         
        
           | 
           | 
          const B &  | 
          inB,  | 
         
        
           | 
           | 
          float  | 
          inTolerance,  | 
         
        
           | 
           | 
          float  | 
          inMaxDistSq,  | 
         
        
           | 
           | 
          Vec3 &  | 
          ioV,  | 
         
        
           | 
           | 
          Vec3 &  | 
          outPointA,  | 
         
        
           | 
           | 
          Vec3 &  | 
          outPointB  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inline   | 
  
 
Get closest points between inA and inB
- Parameters
 - 
  
    | inA | The convex object A, must support the GetSupport(Vec3) function.  | 
    | inB | The convex object B, must support the GetSupport(Vec3) function.  | 
    | inTolerance | The minimal distance between A and B before the objects are considered colliding and processing is terminated.  | 
    | inMaxDistSq | The maximum squared distance between A and B before the objects are considered infinitely far away and processing is terminated.  | 
    | ioV | Initial guess for the separating axis. Start with any non-zero vector if you don't know. If return value is 0, ioV = (0, 0, 0). If the return value is bigger than 0 but smaller than FLT_MAX, ioV will be the separating axis in the direction from A to B and its length the squared distance between A and B. If the return value is FLT_MAX, ioV will be the separating axis in the direction from A to B and the magnitude of the vector is meaningless.  | 
    | outPointA,outPointB | If the return value is 0 the points are invalid. If the return value is bigger than 0 but smaller than FLT_MAX these will contain the closest point on A and B. If the return value is FLT_MAX the points are invalid. | 
  
   
- Returns
 - The squared distance between A and B or FLT_MAX when they are further away than inMaxDistSq. 
 
 
 
◆ GetClosestPointsSimplex()
  
  
      
        
          | void GJKClosestPoint::GetClosestPointsSimplex  | 
          ( | 
          Vec3 *  | 
          outY,  | 
         
        
           | 
           | 
          Vec3 *  | 
          outP,  | 
         
        
           | 
           | 
          Vec3 *  | 
          outQ,  | 
         
        
           | 
           | 
          uint &  | 
          outNumPoints  | 
         
        
           | 
          ) | 
           |  const | 
         
       
   | 
  
inline   | 
  
 
Get the resulting simplex after the GetClosestPoints algorithm finishes. If it returned a squared distance of 0, the origin will be contained in the simplex. 
 
 
◆ Intersects()
template<typename A , typename B > 
  
  
      
        
          | bool GJKClosestPoint::Intersects  | 
          ( | 
          const A &  | 
          inA,  | 
         
        
           | 
           | 
          const B &  | 
          inB,  | 
         
        
           | 
           | 
          float  | 
          inTolerance,  | 
         
        
           | 
           | 
          Vec3 &  | 
          ioV  | 
         
        
           | 
          ) | 
           |  | 
         
       
   | 
  
inline   | 
  
 
Test if inA and inB intersect
- Parameters
 - 
  
    | inA | The convex object A, must support the GetSupport(Vec3) function.  | 
    | inB | The convex object B, must support the GetSupport(Vec3) function.  | 
    | inTolerance | Minimal distance between objects when the objects are considered to be colliding  | 
    | ioV | is used as initial separating axis (provide a zero vector if you don't know yet) | 
  
   
- Returns
 - True if they intersect (in which case ioV = (0, 0, 0)). False if they don't intersect in which case ioV is a separating axis in the direction from A to B (magnitude is meaningless) 
 
 
 
The documentation for this class was generated from the following file: