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 Vec3f & | getBVAxis (const BV &bv, int i) |
template<> | |
const Vec3f & | getBVAxis< 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__ |
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 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
struct fcl::details::sse_meta_f4 fcl::details::__attribute__ | ( | (aligned(16)) | ) |
|
inlinestatic |
References abs(), and fcl::details::Vec3Data< T >::vs.
Referenced by fcl::abs(), abs(), fcl::details::sse_meta_f12::abs(), fcl::details::sse_meta_f16::abs(), fcl::Halfspace::distance(), and fcl::Plane::distance().
|
inlinestatic |
References __attribute__, and sse_meta_f4().
|
inlinestatic |
References __attribute__, sse_meta_d4(), and fcl::details::sse_meta_d4::v.
Matrix3Data<T> fcl::details::abs | ( | const Matrix3Data< T > & | m | ) |
References abs(), and fcl::details::Matrix3Data< T >::rs.
Referenced by abs().
|
inlinestatic |
References abs(), and fcl::details::sse_meta_f12::getColumn().
|
inlinestatic |
References abs(), and fcl::details::sse_meta_f16::getColumn().
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
References cross_prod(), and sse_meta_f4().
|
inlinestatic |
|
inlinestatic |
References cross_prod(), sse_meta_d4(), and fcl::details::sse_meta_d4::v.
|
inlinestatic |
References fcl::details::Vec3Data< T >::vs.
Referenced by fcl::details::Matrix3Data< FCL_REAL >::determinant(), fcl::details::sse_meta_f12::determinant(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::dot(), dot_prod3(), inverse(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::length(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::norm(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::normalize(), fcl::normalize(), fcl::details::Matrix3Data< FCL_REAL >::operator*(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::sqrLength(), fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::squaredNorm(), fcl::details::Matrix3Data< FCL_REAL >::timesTranspose(), fcl::details::sse_meta_f12::transposeDot(), and fcl::details::sse_meta_f12::transposeTimes().
|
inlinestatic |
References vec_splat.
|
inlinestatic |
References dot_prod3().
|
inlinestatic |
References vec_splatd.
|
inlinestatic |
References dot_prod3(), and fcl::details::sse_meta_d4::v.
|
inlinestatic |
|
inlinestatic |
References dot_prod4().
|
inlinestatic |
|
inlinestatic |
References dot_prod4(), and fcl::details::sse_meta_d4::v.
|
inlinestatic |
References fcl::details::Vec3Data< T >::vs.
Referenced by fcl::Vec3fX< details::Vec3Data< FCL_REAL > >::equal().
|
inlinestatic |
|
inlinestatic |
References fcl::details::sse_meta_d4::v.
const Vec3f& fcl::details::getBVAxis | ( | const BV & | bv, |
int | i | ||
) |
Referenced by meshConservativeAdvancementTraversalNodeCanStop().
|
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 | ||
) |
GJK collision algorithm.
Referenced by fcl::GJKSolver_libccd::shapeIntersect(), and fcl::GJKSolver_libccd::shapeTriangleIntersect().
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.
obj1,obj2 | objects to compute the distance between, |
supp1,supp2,support | functions of each object, |
p1,p2 | closest points on objects in global frame, |
dist | distance between objects, |
Referenced by fcl::GJKSolver_libccd::shapeDistance(), and fcl::GJKSolver_libccd::shapeTriangleDistance().
|
inlinestatic |
References cross_prod(), dot_prod3(), transpose(), and vec_splat.
Matrix3Data<T> fcl::details::inverse | ( | const Matrix3Data< T > & | m | ) |
References fcl::details::Matrix3Data< T >::determinant(), and fcl::details::Matrix3Data< T >::rs.
Referenced by fcl::details::sse_meta_f12::inverse(), inverse(), and fcl::details::sse_meta_f16::inverse().
|
inlinestatic |
References fcl::details::sse_meta_f12::getColumn(), inverse(), and fcl::details::sse_meta_f4::v.
|
inlinestatic |
References __attribute__, and _mm_ror_ps.
|
inlinestatic |
References fcl::details::sse_meta_f16::getColumn(), inverse(), and fcl::details::sse_meta_f4::v.
|
inlinestatic |
References fcl::details::Vec3Data< T >::vs.
Referenced by fcl::NearestNeighborsGNAT< _T >::clear(), fcl::DistanceResult::clear(), fcl::computeScaler(), fcl::SpatialHashingCollisionManager< HashTable >::distance(), fcl::SpatialHashingCollisionManager< HashTable >::distance_(), fcl::details::Vec3Data< FCL_REAL >::lbound(), fcl::max(), and fcl::NearestNeighborsGNAT< _T >::Node::split().
|
inlinestatic |
References sse_meta_f4().
|
inlinestatic |
References sse_meta_d4(), and fcl::details::sse_meta_d4::v.
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 | ||
) |
References fcl::bound(), fcl::ConservativeAdvancementStackData::c1, fcl::ConservativeAdvancementStackData::c2, fcl::MotionBase::computeMotionBound(), fcl::ConservativeAdvancementStackData::d, fcl::BVHModel< BV >::getBV(), getBVAxis(), fcl::Vec3fX< T >::normalize(), fcl::ConservativeAdvancementStackData::P1, and fcl::ConservativeAdvancementStackData::P2.
Referenced by fcl::MeshConservativeAdvancementTraversalNode< BV >::canStop().
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 | ||
) |
References fcl::bound(), fcl::ConservativeAdvancementStackData::c1, fcl::MotionBase::computeMotionBound(), fcl::BVHModel< BV >::getBV(), fcl::Vec3fX< T >::normalize(), fcl::ConservativeAdvancementStackData::P1, and fcl::ConservativeAdvancementStackData::P2.
Referenced by fcl::MeshShapeConservativeAdvancementTraversalNodeRSS< S, NarrowPhaseSolver >::canStop(), fcl::MeshShapeConservativeAdvancementTraversalNodeOBBRSS< S, NarrowPhaseSolver >::canStop(), fcl::ShapeMeshConservativeAdvancementTraversalNodeRSS< S, NarrowPhaseSolver >::canStop(), and fcl::ShapeMeshConservativeAdvancementTraversalNodeOBBRSS< S, NarrowPhaseSolver >::canStop().
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 | ||
) |
References fcl::bound(), fcl::MotionBase::computeMotionBound(), fcl::distance(), fcl::BVHModel< BV >::getBV(), fcl::Vec3fX< T >::normalize(), and fcl::BVNodeBase::primitiveId().
Referenced by fcl::MeshShapeConservativeAdvancementTraversalNodeRSS< S, NarrowPhaseSolver >::leafTesting(), fcl::MeshShapeConservativeAdvancementTraversalNodeOBBRSS< S, NarrowPhaseSolver >::leafTesting(), fcl::ShapeMeshConservativeAdvancementTraversalNodeRSS< S, NarrowPhaseSolver >::leafTesting(), and fcl::ShapeMeshConservativeAdvancementTraversalNodeOBBRSS< S, NarrowPhaseSolver >::leafTesting().
|
inlinestatic |
References fcl::details::Vec3Data< T >::vs.
Referenced by fcl::MeshContinuousCollisionTraversalNode< BV >::leafTesting(), fcl::min(), fcl::repack(), fcl::Vec_n< FCL_REAL, N >::setData(), fcl::NearestNeighborsGNAT< _T >::Node::split(), fcl::details::Vec3Data< FCL_REAL >::ubound(), and fcl::Vec_n< FCL_REAL, N >::Vec_n().
|
inlinestatic |
References sse_meta_f4().
|
inlinestatic |
References sse_meta_d4(), and fcl::details::sse_meta_d4::v.
|
inlinestatic |
Referenced by normalize3().
|
inlinestatic |
References newtonraphson_rsqrt4(), sse_meta_f4(), and vec_splat.
|
inlinestatic |
References sse_meta_f4(), and vec_splat.
|
inlinestatic |
|
inlinestatic |
References __attribute__, vec_sel(), and vec_splat.
Matrix3Data<T> fcl::details::transpose | ( | const Matrix3Data< T > & | m | ) |
References fcl::details::Matrix3Data< T >::rs.
Referenced by inverse(), fcl::details::sse_meta_f12::transpose(), transpose(), and fcl::details::sse_meta_f16::transpose().
|
inlinestatic |
References fcl::details::sse_meta_f12::getColumn(), transpose(), and fcl::details::sse_meta_f4::v.
|
inlinestatic |
|
inlinestatic |
References fcl::details::sse_meta_f16::getColumn(), transpose(), and fcl::details::sse_meta_f4::v.
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 | ( | ) |
Referenced by fcl::GJKSolver_libccd::shapeTriangleIntersect().
GJKSupportFunction fcl::details::triGetSupportFunction | ( | ) |
|
inlinestatic |
Referenced by transpose(), and vec_sel().
|
inlinestatic |
References vec_sel().
|
inlinestatic |
References vec_sel().
struct fcl::details::sse_meta_d4 fcl::details::__attribute__ |
Referenced by abs(), inverse(), fcl::details::sse_meta_f4::operator-(), fcl::details::sse_meta_d4::operator-(), and transpose().
|
static |
|
static |
|
static |
|
static |
const __m128d fcl::details::xmmd_0 = {0, 0} |
const __m128 fcl::details::xmms_0 = {0.f, 0.f, 0.f, 0.f} |