All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fcl::details Namespace Reference

FCL internals. More...

Classes

struct  EPA
 class for EPA algorithm More...
 
struct  GJK
 class for GJK algorithm More...
 
class  GJKInitializer
 initialize GJK stuffs 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...
 
class  GJKInitializer< Cylinder >
 initialize GJK Cylinder More...
 
class  GJKInitializer< Sphere >
 initialize GJK Sphere More...
 
struct  Matrix3Data
 
struct  MinkowskiDiff
 Minkowski difference class of two shapes. More...
 
struct  sse_meta_d4
 
struct  sse_meta_f12
 
struct  sse_meta_f16
 
struct  sse_meta_f4
 
struct  Vec3Data
 

Typedefs

typedef void(* GJKSupportFunction )(const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)
 callback function used by GJK algorithm More...
 
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 More...
 
GJKSupportFunction triGetSupportFunction ()
 initialize GJK Triangle More...
 
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. More...
 
bool GJKDistance (void *obj1, ccd_support_fn supp1, void *obj2, ccd_support_fn supp2, unsigned int max_iterations, FCL_REAL tolerance, FCL_REAL *dist, Vec3f *p1, Vec3f *p2)
 Distance computation between objects using GJK algorithm. More...
 
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 newtonraphson_rsqrt4 (const __m128 v)
 
struct fcl::details::sse_meta_f4 __attribute__ ((aligned(16)))
 
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 BV , typename S , typename NarrowPhaseSolver >
void meshShapeConservativeAdvancementOrientedNodeLeafTesting (int b1, int, const BVHModel< BV > *model1, const S &model2, const BV &model2_bv, Vec3f *vertices, Triangle *tri_indices, const Transform3f &tf1, const Transform3f &tf2, const MotionBase *motion1, const MotionBase *motion2, const NarrowPhaseSolver *nsolver, bool enable_statistics, FCL_REAL &min_distance, Vec3f &p1, Vec3f &p2, int &last_tri_id, FCL_REAL &delta_t, int &num_leaf_tests)
 
template<typename BV , typename S >
bool meshShapeConservativeAdvancementOrientedNodeCanStop (FCL_REAL c, FCL_REAL min_distance, FCL_REAL abs_err, FCL_REAL rel_err, FCL_REAL w, const BVHModel< BV > *model1, const S &model2, const BV &model2_bv, const MotionBase *motion1, const MotionBase *motion2, std::vector< ConservativeAdvancementStackData > &stack, FCL_REAL &delta_t)
 
template<typename BV >
const Vec3fgetBVAxis (const BV &bv, int i)
 
template<>
const Vec3fgetBVAxis< OBBRSS > (const OBBRSS &bv, int i)
 
template<typename BV >
bool meshConservativeAdvancementTraversalNodeCanStop (FCL_REAL c, FCL_REAL min_distance, FCL_REAL abs_err, FCL_REAL rel_err, FCL_REAL w, const BVHModel< BV > *model1, const BVHModel< BV > *model2, const MotionBase *motion1, const MotionBase *motion2, std::vector< ConservativeAdvancementStackData > &stack, FCL_REAL &delta_t)
 
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)
 

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}
 
struct fcl::details::sse_meta_f12 __attribute__
 

Detailed Description

FCL internals.

for OBB and RSS, there is local coordinate of BV, so normal need to be transformed

Ignore this :) unless you are God

Typedef Documentation

typedef void(* fcl::details::GJKCenterFunction)(const void *obj, ccd_vec3_t *c)
typedef void(* fcl::details::GJKSupportFunction)(const void *obj, const ccd_vec3_t *dir_, ccd_vec3_t *v)

callback function used by GJK algorithm

Function Documentation

struct fcl::details::sse_meta_f4 fcl::details::__attribute__ ( (aligned(16))  )
template<typename T >
static Vec3Data<T> fcl::details::abs ( const Vec3Data< T > &  x)
inlinestatic
static sse_meta_f4 fcl::details::abs ( const sse_meta_f4 x)
inlinestatic

References __attribute__, and sse_meta_f4().

static sse_meta_d4 fcl::details::abs ( const sse_meta_d4 x)
inlinestatic
template<typename T >
Matrix3Data<T> fcl::details::abs ( const Matrix3Data< T > &  m)

References abs(), and fcl::details::Matrix3Data< T >::rs.

Referenced by abs().

static sse_meta_f12 fcl::details::abs ( const sse_meta_f12 &  mat)
inlinestatic
static sse_meta_f16 fcl::details::abs ( const sse_meta_f16 &  mat)
inlinestatic
template<typename T >
static Vec3Data<T> fcl::details::cross_prod ( const Vec3Data< T > &  l,
const Vec3Data< T > &  r 
)
inlinestatic
static __m128 fcl::details::cross_prod ( __m128  x,
__m128  y 
)
inlinestatic
static sse_meta_f4 fcl::details::cross_prod ( const sse_meta_f4 x,
const sse_meta_f4 y 
)
inlinestatic

References cross_prod(), and sse_meta_f4().

static void fcl::details::cross_prod ( __m128d  x0,
__m128d  x1,
__m128d  y0,
__m128d  y1,
__m128d *  z0,
__m128d *  z1 
)
inlinestatic
static sse_meta_d4 fcl::details::cross_prod ( const sse_meta_d4 x,
const sse_meta_d4 y 
)
inlinestatic
static __m128 fcl::details::dot_prod3 ( __m128  x,
__m128  y 
)
inlinestatic

References vec_splat.

static float fcl::details::dot_prod3 ( const sse_meta_f4 x,
const sse_meta_f4 y 
)
inlinestatic

References dot_prod3().

static __m128d fcl::details::dot_prod3 ( __m128d  x0,
__m128d  x1,
__m128d  y0,
__m128d  y1 
)
inlinestatic

References vec_splatd.

static double fcl::details::dot_prod3 ( const sse_meta_d4 x,
const sse_meta_d4 y 
)
inlinestatic
static __m128 fcl::details::dot_prod4 ( __m128  x,
__m128  y 
)
inlinestatic
static float fcl::details::dot_prod4 ( const sse_meta_f4 x,
const sse_meta_f4 y 
)
inlinestatic

References dot_prod4().

static __m128d fcl::details::dot_prod4 ( __m128d  x0,
__m128d  x1,
__m128d  y0,
__m128d  y1 
)
inlinestatic
static double fcl::details::dot_prod4 ( const sse_meta_d4 x,
const sse_meta_d4 y 
)
inlinestatic
template<typename T >
static bool fcl::details::equal ( const Vec3Data< T > &  x,
const Vec3Data< T > &  y,
epsilon 
)
inlinestatic
static bool fcl::details::equal ( const sse_meta_f4 x,
const sse_meta_f4 y,
float  epsilon 
)
inlinestatic
static bool fcl::details::equal ( const sse_meta_d4 x,
const sse_meta_d4 y,
double  epsilon 
)
inlinestatic
template<typename BV >
const Vec3f& fcl::details::getBVAxis ( const BV &  bv,
int  i 
)
template<>
const Vec3f& fcl::details::getBVAxis< OBBRSS > ( const OBBRSS &  bv,
int  i 
)
inline
Vec3f fcl::details::getSupport ( const ShapeBase *  shape,
const Vec3f &  dir 
)

the support function for shape

Referenced by fcl::details::MinkowskiDiff::support0(), and fcl::details::MinkowskiDiff::support1().

bool fcl::details::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 
)
bool fcl::details::GJKDistance ( void *  obj1,
ccd_support_fn  supp1,
void *  obj2,
ccd_support_fn  supp2,
unsigned int  max_iterations,
FCL_REAL  tolerance,
FCL_REAL *  dist,
Vec3f *  p1,
Vec3f *  p2 
)

Distance computation between objects using GJK algorithm.

Parameters
obj1,obj2objects to compute the distance between,
supp1,supp2,supportfunctions of each object,
Return values
p1,p2closest points on objects in global frame,
distdistance between objects,
Returns
whether distance is non negative (no collision).

Referenced by fcl::GJKSolver_libccd::shapeDistance(), and fcl::GJKSolver_libccd::shapeTriangleDistance().

static void fcl::details::inverse ( __m128  c0,
__m128  c1,
__m128  c2,
__m128 *  i0,
__m128 *  i1,
__m128 *  i2 
)
inlinestatic
template<typename T >
Matrix3Data<T> fcl::details::inverse ( const Matrix3Data< T > &  m)
static sse_meta_f12 fcl::details::inverse ( const sse_meta_f12 &  mat)
inlinestatic
static void fcl::details::inverse ( __m128  c0,
__m128  c1,
__m128  c2,
__m128  c3,
__m128 *  res0,
__m128 *  res1,
__m128 *  res2,
__m128 *  res3 
)
inlinestatic

References __attribute__, and _mm_ror_ps.

static sse_meta_f16 fcl::details::inverse ( const sse_meta_f16 &  mat)
inlinestatic
static sse_meta_f4 fcl::details::max ( const sse_meta_f4 x,
const sse_meta_f4 y 
)
inlinestatic

References sse_meta_f4().

static sse_meta_d4 fcl::details::max ( const sse_meta_d4 x,
const sse_meta_d4 y 
)
inlinestatic
template<typename BV >
bool fcl::details::meshConservativeAdvancementTraversalNodeCanStop ( FCL_REAL  c,
FCL_REAL  min_distance,
FCL_REAL  abs_err,
FCL_REAL  rel_err,
FCL_REAL  w,
const BVHModel< BV > *  model1,
const BVHModel< BV > *  model2,
const MotionBase *  motion1,
const MotionBase *  motion2,
std::vector< ConservativeAdvancementStackData > &  stack,
FCL_REAL &  delta_t 
)
template<typename BV , typename S >
bool fcl::details::meshShapeConservativeAdvancementOrientedNodeCanStop ( FCL_REAL  c,
FCL_REAL  min_distance,
FCL_REAL  abs_err,
FCL_REAL  rel_err,
FCL_REAL  w,
const BVHModel< BV > *  model1,
const S &  model2,
const BV &  model2_bv,
const MotionBase *  motion1,
const MotionBase *  motion2,
std::vector< ConservativeAdvancementStackData > &  stack,
FCL_REAL &  delta_t 
)
template<typename BV , typename S , typename NarrowPhaseSolver >
void fcl::details::meshShapeConservativeAdvancementOrientedNodeLeafTesting ( int  b1,
int  ,
const BVHModel< BV > *  model1,
const S &  model2,
const BV &  model2_bv,
Vec3f *  vertices,
Triangle *  tri_indices,
const Transform3f &  tf1,
const Transform3f &  tf2,
const MotionBase *  motion1,
const MotionBase *  motion2,
const NarrowPhaseSolver *  nsolver,
bool  enable_statistics,
FCL_REAL &  min_distance,
Vec3f &  p1,
Vec3f &  p2,
int &  last_tri_id,
FCL_REAL &  delta_t,
int &  num_leaf_tests 
)
static sse_meta_f4 fcl::details::min ( const sse_meta_f4 x,
const sse_meta_f4 y 
)
inlinestatic

References sse_meta_f4().

static sse_meta_d4 fcl::details::min ( const sse_meta_d4 x,
const sse_meta_d4 y 
)
inlinestatic
static __m128 fcl::details::newtonraphson_rsqrt4 ( const __m128  v)
inlinestatic

Referenced by normalize3().

static sse_meta_f4 fcl::details::normalize3 ( const sse_meta_f4 x)
inlinestatic
static sse_meta_f4 fcl::details::normalize3_approx ( const sse_meta_f4 x)
inlinestatic

References sse_meta_f4(), and vec_splat.

template<typename S , typename BV , typename NarrowPhaseSolver , template< typename, typename > class OrientedNode>
static bool fcl::details::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 
)
inlinestatic
static void fcl::details::transpose ( __m128  c0,
__m128  c1,
__m128  c2,
__m128 *  r0,
__m128 *  r1,
__m128 *  r2 
)
inlinestatic

References __attribute__, vec_sel(), and vec_splat.

template<typename T >
Matrix3Data<T> fcl::details::transpose ( const Matrix3Data< T > &  m)
static sse_meta_f12 fcl::details::transpose ( const sse_meta_f12 &  mat)
inlinestatic
static void fcl::details::transpose ( __m128  c0,
__m128  c1,
__m128  c2,
__m128  c3,
__m128 *  r0,
__m128 *  r1,
__m128 *  r2,
__m128 *  r3 
)
inlinestatic
static sse_meta_f16 fcl::details::transpose ( const sse_meta_f16 &  mat)
inlinestatic
void* fcl::details::triCreateGJKObject ( const Vec3f &  P1,
const Vec3f &  P2,
const Vec3f &  P3 
)
void* fcl::details::triCreateGJKObject ( const Vec3f &  P1,
const Vec3f &  P2,
const Vec3f &  P3,
const Transform3f &  tf 
)
void fcl::details::triDeleteGJKObject ( void *  o)
GJKCenterFunction fcl::details::triGetCenterFunction ( )
static __m128 fcl::details::vec_sel ( __m128  a,
__m128  b,
__m128  mask 
)
inlinestatic

Referenced by transpose(), and vec_sel().

static __m128 fcl::details::vec_sel ( __m128  a,
__m128  b,
const unsigned int *  mask 
)
inlinestatic

References vec_sel().

static __m128 fcl::details::vec_sel ( __m128  a,
__m128  b,
unsigned int  mask 
)
inlinestatic

References vec_sel().

Variable Documentation

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