All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends

fcl::details Namespace Reference

FCL internals. Ignore this :) unless you are God. More...


Classes

struct  Vec3Data
struct  Matrix3Data
struct  MinkowskiDiff
 Minkowski difference class of two shapes. More...
struct  GJK
 class for GJK algorithm More...
struct  EPA
 class for EPA algorithm More...
class  GJKInitializer
 initialize GJK stuffs More...
class  GJKInitializer< Cylinder >
 initialize GJK Cylinder More...
class  GJKInitializer< Sphere >
 initialize GJK Sphere More...
class  GJKInitializer< Box >
 initialize GJK Box More...
class  GJKInitializer< Capsule >
 initialize GJK Capsule More...
class  GJKInitializer< Cone >
 initialize GJK Cone More...
class  GJKInitializer< Convex >
 initialize GJK Convex More...
struct  sse_meta_f4
struct  sse_meta_d4
struct  sse_meta_f12
struct  sse_meta_f16

Typedefs

typedef void(*) GJKSupportFunction (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
 callback function used by GJK algorithm
typedef void(*) GJKCenterFunction (const void *obj, ccd_vec3_t *c)

Functions

template<typename T>
static Vec3Data< T > cross_prod (const Vec3Data< T > &l, const Vec3Data< T > &r)
template<typename T>
static T dot_prod3 (const Vec3Data< T > &l, const Vec3Data< T > &r)
template<typename T>
static Vec3Data< T > min (const Vec3Data< T > &x, const Vec3Data< T > &y)
template<typename T>
static Vec3Data< T > max (const Vec3Data< T > &x, const Vec3Data< T > &y)
template<typename T>
static Vec3Data< T > abs (const Vec3Data< T > &x)
template<typename T>
static bool equal (const Vec3Data< T > &x, const Vec3Data< T > &y, T epsilon)
template<typename T>
Matrix3Data< T > abs (const Matrix3Data< T > &m)
template<typename T>
Matrix3Data< T > transpose (const Matrix3Data< T > &m)
template<typename T>
Matrix3Data< T > inverse (const Matrix3Data< T > &m)
Vec3f getSupport (const ShapeBase *shape, const Vec3f &dir)
 the support function for shape
FCL_REAL projectOrigin (const Vec3f &a, const Vec3f &b, FCL_REAL *w, size_t &m)
 project origin on to a line (a, b). w[0:1] return the (0, 1) parameterization of the projected point. m is a encode about the result case: 0x10--> project is larger than b; 0x01--> project is smaller than a; 0x11-> within the line; return value is distance between the origin and its projection.
FCL_REAL projectOrigin (const Vec3f &a, const Vec3f &b, const Vec3f &c, FCL_REAL *w, size_t &m)
 project origin on to a triangle (a, b, c). w[0:2] return the (0, 1) parameterization of the projected point. m is a encode about the result case. return value is distance between the origin and its projection.
FCL_REAL projectOrigin (const Vec3f &a, const Vec3f &b, const Vec3f &c, const Vec3f &d, FCL_REAL *w, size_t &m)
 project origin on to a tetrahedra (a, b, c, d). w[0:3] return the (0, 1) parameterization of the projected point. m is a encode about the result case. return value is distance between the origin and its projection.
GJKSupportFunction triGetSupportFunction ()
 initialize GJK Triangle
GJKCenterFunction triGetCenterFunction ()
void * triCreateGJKObject (const Vec3f &P1, const Vec3f &P2, const Vec3f &P3)
void * triCreateGJKObject (const Vec3f &P1, const Vec3f &P2, const Vec3f &P3, const Transform3f &tf)
void triDeleteGJKObject (void *o)
bool GJKCollide (void *obj1, ccd_support_fn supp1, ccd_center_fn cen1, void *obj2, ccd_support_fn supp2, ccd_center_fn cen2, unsigned int max_iterations, FCL_REAL tolerance, Vec3f *contact_points, FCL_REAL *penetration_depth, Vec3f *normal)
 GJK collision algorithm.
bool GJKDistance (void *obj1, ccd_support_fn supp1, void *obj2, ccd_support_fn supp2, unsigned int max_iterations, FCL_REAL tolerance, FCL_REAL *dist)
static __m128 vec_sel (__m128 a, __m128 b, __m128 mask)
static __m128 vec_sel (__m128 a, __m128 b, const unsigned int *mask)
static __m128 vec_sel (__m128 a, __m128 b, unsigned int mask)
static __m128 vec_splat (__m128 a, int e)
static __m128d vec_splat (__m128d a, int e)
static __m128 _mm_ror_ps (__m128 x, int e)
static __m128 _mm_rol_ps (__m128 x, int e)
static __m128 newtonraphson_rsqrt4 (const __m128 v)
static __m128 cross_prod (__m128 x, __m128 y)
static sse_meta_f4 cross_prod (const sse_meta_f4 &x, const sse_meta_f4 &y)
static void cross_prod (__m128d x0, __m128d x1, __m128d y0, __m128d y1, __m128d *z0, __m128d *z1)
static sse_meta_d4 cross_prod (const sse_meta_d4 &x, const sse_meta_d4 &y)
static __m128 dot_prod3 (__m128 x, __m128 y)
static float dot_prod3 (const sse_meta_f4 &x, const sse_meta_f4 &y)
static __m128d dot_prod3 (__m128d x0, __m128d x1, __m128d y0, __m128d y1)
static double dot_prod3 (const sse_meta_d4 &x, const sse_meta_d4 &y)
static __m128 dot_prod4 (__m128 x, __m128 y)
static float dot_prod4 (const sse_meta_f4 &x, const sse_meta_f4 &y)
static __m128d dot_prod4 (__m128d x0, __m128d x1, __m128d y0, __m128d y1)
static double dot_prod4 (const sse_meta_d4 &x, const sse_meta_d4 &y)
static sse_meta_f4 min (const sse_meta_f4 &x, const sse_meta_f4 &y)
static sse_meta_d4 min (const sse_meta_d4 &x, const sse_meta_d4 &y)
static sse_meta_f4 max (const sse_meta_f4 &x, const sse_meta_f4 &y)
static sse_meta_d4 max (const sse_meta_d4 &x, const sse_meta_d4 &y)
static sse_meta_f4 abs (const sse_meta_f4 &x)
static sse_meta_d4 abs (const sse_meta_d4 &x)
static bool equal (const sse_meta_f4 &x, const sse_meta_f4 &y, float epsilon)
static bool equal (const sse_meta_d4 &x, const sse_meta_d4 &y, double epsilon)
static sse_meta_f4 normalize3 (const sse_meta_f4 &x)
static sse_meta_f4 normalize3_approx (const sse_meta_f4 &x)
static void transpose (__m128 c0, __m128 c1, __m128 c2, __m128 *r0, __m128 *r1, __m128 *r2)
static void inverse (__m128 c0, __m128 c1, __m128 c2, __m128 *i0, __m128 *i1, __m128 *i2)
static sse_meta_f12 abs (const sse_meta_f12 &mat)
static sse_meta_f12 transpose (const sse_meta_f12 &mat)
static sse_meta_f12 inverse (const sse_meta_f12 &mat)
static void transpose (__m128 c0, __m128 c1, __m128 c2, __m128 c3, __m128 *r0, __m128 *r1, __m128 *r2, __m128 *r3)
static void inverse (__m128 c0, __m128 c1, __m128 c2, __m128 c3, __m128 *res0, __m128 *res1, __m128 *res2, __m128 *res3)
static sse_meta_f16 abs (const sse_meta_f16 &mat)
static sse_meta_f16 transpose (const sse_meta_f16 &mat)
static sse_meta_f16 inverse (const sse_meta_f16 &mat)
template<typename S, typename BV, typename NarrowPhaseSolver, template< typename, typename > class OrientedNode>
static bool setupShapeMeshDistanceOrientedNode (OrientedNode< S, NarrowPhaseSolver > &node, const S &model1, const Transform3f &tf1, const BVHModel< BV > &model2, const Transform3f &tf2, const NarrowPhaseSolver *nsolver, const DistanceRequest &request, DistanceResult &result)
static void tripleCross (const ccd_vec3_t *a, const ccd_vec3_t *b, const ccd_vec3_t *c, ccd_vec3_t *d)
static int doSimplex2Dist (ccd_simplex_t *simplex, ccd_vec3_t *dir, ccd_real_t *dist)
static int doSimplex3Dist (ccd_simplex_t *simplex, ccd_vec3_t *dir, ccd_real_t *dist)
static int doSimplex4Dist (ccd_simplex_t *simplex, ccd_vec3_t *dir, ccd_real_t *dist)
static int doSimplexDist (ccd_simplex_t *simplex, ccd_vec3_t *dir, ccd_real_t *dist)
static ccd_real_t __ccdGJKDist (const void *obj1, const void *obj2, const ccd_t *ccd, ccd_simplex_t *simplex, ccd_real_t tolerance)
static void shapeToGJK (const ShapeBase &s, const Transform3f &tf, ccd_obj_t *o)
static void boxToGJK (const Box &s, const Transform3f &tf, ccd_box_t *box)
static void capToGJK (const Capsule &s, const Transform3f &tf, ccd_cap_t *cap)
static void cylToGJK (const Cylinder &s, const Transform3f &tf, ccd_cyl_t *cyl)
static void coneToGJK (const Cone &s, const Transform3f &tf, ccd_cone_t *cone)
static void sphereToGJK (const Sphere &s, const Transform3f &tf, ccd_sphere_t *sph)
static void convexToGJK (const Convex &s, const Transform3f &tf, ccd_convex_t *conv)
static void supportBox (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportCap (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportCyl (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportCone (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportSphere (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportConvex (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void supportTriangle (const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
static void centerShape (const void *obj, ccd_vec3_t *c)
static void centerConvex (const void *obj, ccd_vec3_t *c)
static void centerTriangle (const void *obj, ccd_vec3_t *c)
bool sphereSphereIntersect (const Sphere &s1, const Transform3f &tf1, const Sphere &s2, const Transform3f &tf2, Vec3f *contact_points, FCL_REAL *penetration_depth, Vec3f *normal)
bool sphereSphereDistance (const Sphere &s1, const Transform3f &tf1, const Sphere &s2, const Transform3f &tf2, FCL_REAL *dist)
FCL_REAL segmentSqrDistance (const Vec3f &from, const Vec3f &to, const Vec3f &p, Vec3f &nearest)
 the minimum distance from a point to a line
bool projectInTriangle (const Vec3f &p1, const Vec3f &p2, const Vec3f &p3, const Vec3f &normal, const Vec3f &p)
 Whether a point's projection is in a triangle.
bool sphereTriangleIntersect (const Sphere &s, const Transform3f &tf, const Vec3f &P1, const Vec3f &P2, const Vec3f &P3, Vec3f *contact_points, FCL_REAL *penetration_depth, Vec3f *normal_)
bool sphereTriangleDistance (const Sphere &sp, const Transform3f &tf, const Vec3f &P1, const Vec3f &P2, const Vec3f &P3, FCL_REAL *dist)
static void lineClosestApproach (const Vec3f &pa, const Vec3f &ua, const Vec3f &pb, const Vec3f &ub, FCL_REAL *alpha, FCL_REAL *beta)
static int intersectRectQuad2 (FCL_REAL h[2], FCL_REAL p[8], FCL_REAL ret[16])
static void cullPoints2 (int n, FCL_REAL p[], int m, int i0, int iret[])
int boxBox2 (const Vec3f &side1, const Matrix3f &R1, const Vec3f &T1, const Vec3f &side2, const Matrix3f &R2, const Vec3f &T2, Vec3f &normal, FCL_REAL *depth, int *return_code, int maxc, std::vector< ContactPoint > &contacts)
bool boxBoxIntersect (const Box &s1, const Transform3f &tf1, const Box &s2, const Transform3f &tf2, Vec3f *contact_points, FCL_REAL *penetration_depth_, Vec3f *normal_)
std::vector< Vec3fgetBoundVertices (const Box &box, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Sphere &sphere, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Capsule &capsule, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Cone &cone, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Cylinder &cylinder, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Convex &convex, const Transform3f &tf)
std::vector< Vec3fgetBoundVertices (const Triangle2 &triangle, const Transform3f &tf)
template<typename BV>
static void meshCollisionOrientedNodeLeafTesting (int b1, int b2, const BVHModel< BV > *model1, const BVHModel< BV > *model2, Vec3f *vertices1, Vec3f *vertices2, Triangle *tri_indices1, Triangle *tri_indices2, const Matrix3f &R, const Vec3f &T, const Transform3f &tf1, const Transform3f &tf2, bool enable_statistics, FCL_REAL cost_density, int &num_leaf_tests, const CollisionRequest &request, CollisionResult &result)
template<typename BV>
static void meshDistanceOrientedNodeLeafTesting (int b1, int b2, const BVHModel< BV > *model1, const BVHModel< BV > *model2, Vec3f *vertices1, Vec3f *vertices2, Triangle *tri_indices1, Triangle *tri_indices2, const Matrix3f &R, const Vec3f &T, bool enable_statistics, int &num_leaf_tests, const DistanceRequest &request, DistanceResult &result)
template<typename BV>
static void distancePreprocessOrientedNode (const BVHModel< BV > *model1, const BVHModel< BV > *model2, const Vec3f *vertices1, Vec3f *vertices2, Triangle *tri_indices1, Triangle *tri_indices2, int init_tri_id1, int init_tri_id2, const Matrix3f &R, const Vec3f &T, const DistanceRequest &request, DistanceResult &result)
template<typename BV>
static void distancePostprocessOrientedNode (const BVHModel< BV > *model1, const BVHModel< BV > *model2, const Transform3f &tf1, const DistanceRequest &request, DistanceResult &result)
template<typename BV, typename OrientedNode>
static bool setupMeshCollisionOrientedNode (OrientedNode &node, const BVHModel< BV > &model1, const Transform3f &tf1, const BVHModel< BV > &model2, const Transform3f &tf2, const CollisionRequest &request, CollisionResult &result)
template<typename BV, typename OrientedNode>
static bool setupMeshDistanceOrientedNode (OrientedNode &node, const BVHModel< BV > &model1, const Transform3f &tf1, const BVHModel< BV > &model2, const Transform3f &tf2, const DistanceRequest &request, DistanceResult &result)

Variables

static const size_t EPA_MAX_FACES = 128
static const size_t EPA_MAX_VERTICES = 64
static const FCL_REAL EPA_EPS = 0.000001
static const size_t EPA_MAX_ITERATIONS = 255
const __m128 xmms_0 = {0.f, 0.f, 0.f, 0.f}
const __m128d xmmd_0 = {0, 0}
fcl::details::sse_meta_f4 aligned
fcl::details::sse_meta_d4 aligned

Detailed Description

FCL internals. Ignore this :) unless you are God.

Function Documentation

static void fcl::details::shapeToGJK ( const ShapeBase &  s,
const Transform3f &  tf,
ccd_obj_t *  o 
) [static]

Basic shape to ccd shape

Definition at line 441 of file gjk_libccd.cpp.

static void fcl::details::supportBox ( const void *  obj,
const ccd_vec3_t *  dir_,
ccd_vec3_t *  v 
) [static]

Support functions

Definition at line 492 of file gjk_libccd.cpp.

template<typename BV>
static void fcl::details::distancePostprocessOrientedNode ( const BVHModel< BV > *  model1,
const BVHModel< BV > *  model2,
const Transform3f &  tf1,
const DistanceRequest &  request,
DistanceResult &  result 
) [inline, static]

Definition at line 333 of file traversal_node_bvhs.cpp.