diff --git a/trunk/fcl/CMakeLists.txt b/trunk/fcl/CMakeLists.txt index 0d75d70213fb6c9666a2612a2fa2a62076effe3d..24d288ac3a9d85c51496c149c27ba634ac5f54da 100644 --- a/trunk/fcl/CMakeLists.txt +++ b/trunk/fcl/CMakeLists.txt @@ -27,10 +27,11 @@ pkg_check_modules(CCD REQUIRED ccd) include_directories(${CCD_INCLUDE_DIRS}) link_directories(${CCD_LIBRARY_DIRS}) -pkg_check_modules(OCTOMAP REQUIRED octomap) -include_directories(${OCTOMAP_INCLUDE_DIRS}) -link_directories(${OCTOMAP_LIBRARY_DIRS}) - +pkg_check_modules(OCTOMAP QUIET octomap) +if(OCTOMAP_FOUND) + include_directories(${OCTOMAP_INCLUDE_DIRS}) + link_directories(${OCTOMAP_LIBRARY_DIRS}) +endif() add_definitions(-DUSE_SVMLIGHT=0) add_library(${PROJECT_NAME} SHARED src/BV/AABB.cpp src/BV/OBB.cpp src/BV/RSS.cpp src/BV/kIOS.cpp src/BV/OBBRSS.cpp src/BV/kDOP.cpp src/traversal/traversal_node_base.cpp src/traversal/traversal_node_bvhs.cpp src/intersect.cpp src/ccd/motion.cpp src/BVH/BV_fitter.cpp src/BVH/BV_splitter.cpp src/BVH/BVH_model.cpp src/BVH/BVH_utility.cpp src/math/transform.cpp src/traversal/traversal_node_setup.cpp src/shape/geometric_shapes.cpp src/shape/geometric_shapes_utility.cpp src/collision_node.cpp src/traversal/traversal_recurse.cpp src/broadphase/broadphase_bruteforce.cpp src/broadphase/broadphase_spatialhash.cpp src/broadphase/broadphase_SaP.cpp src/broadphase/broadphase_SSaP.cpp src/broadphase/broadphase_interval_tree.cpp src/broadphase/broadphase_dynamic_AABB_tree.cpp src/broadphase/broadphase_dynamic_AABB_tree_array.cpp src/collision.cpp src/collision_func_matrix.cpp src/broadphase/interval_tree.cpp src/ccd/conservative_advancement.cpp src/ccd/interval.cpp src/ccd/interval_vector.cpp src/ccd/interval_matrix.cpp src/ccd/taylor_model.cpp src/ccd/taylor_vector.cpp src/ccd/taylor_matrix.cpp src/distance_func_matrix.cpp src/distance.cpp src/narrowphase/gjk.cpp src/narrowphase/gjk_libccd.cpp src/narrowphase/narrowphase.cpp src/broadphase/hierarchy_tree.cpp src/profile.cpp src/collision_data.cpp) diff --git a/trunk/fcl/include/fcl/ccd/motion.h b/trunk/fcl/include/fcl/ccd/motion.h index 124bb268dc761c8a6bc77ef7433d863bc593b280..0fd9f91703ff796b77f4221f95f9f6d85fc014aa 100644 --- a/trunk/fcl/include/fcl/ccd/motion.h +++ b/trunk/fcl/include/fcl/ccd/motion.h @@ -525,7 +525,7 @@ public: InterpMotion(const Matrix3f& R1, const Vec3f& T1, const Matrix3f& R2, const Vec3f& T2, const Vec3f& O) : tf1(R1, T1), - tf2(T2, T2), + tf2(R2, T2), tf(tf1), reference_p(O) { diff --git a/trunk/fcl/include/fcl/simd/math_simd_details.h b/trunk/fcl/include/fcl/simd/math_simd_details.h index 404f9381c35fb5590699d6084c17ed51320fc2e6..8248ab597d3b46f76c944cf6b7cbf30b1554757c 100644 --- a/trunk/fcl/include/fcl/simd/math_simd_details.h +++ b/trunk/fcl/include/fcl/simd/math_simd_details.h @@ -73,25 +73,11 @@ static inline __m128 vec_sel(__m128 a, __m128 b, unsigned int mask) return vec_sel(a, b, _mm_set1_ps(*(float*)&mask)); } -static inline __m128 vec_splat(__m128 a, int e) -{ - return _mm_shuffle_ps(a, a, _MM_SHUFFLE(e, e, e, e)); -} - -static inline __m128d vec_splat(__m128d a, int e) -{ - return _mm_shuffle_pd(a, a, _MM_SHUFFLE2(e, e)); -} +#define vec_splat(a, e) _mm_shuffle_ps((a), (a), _MM_SHUFFLE((e), (e), (e), (e))) +#define vec_splatd(a, e) _mm_shuffle_pd((a), (a), _MM_SHUFFLE2((e), (e))) -static inline __m128 _mm_ror_ps(__m128 x, int e) -{ - return (e % 4) ? _mm_shuffle_ps(x, x, _MM_SHUFFLE((e+3)%4, (e+2)%4, (e+1)%4, e%4)) : x; -} - -static inline __m128 _mm_rol_ps(__m128 x, int e) -{ - return (e % 4) ? _mm_shuffle_ps(x, x, _MM_SHUFFLE((7-e)%4, (6-e)%4, (5-e)%4, (4-e)%4)) : x; -} +#define _mm_ror_ps(x, e) (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE(((e)+3)%4, ((e)+2)%4, ((e)+1)%4, (e)%4)) : (x)) +#define _mm_rol_ps(x, e) (((e) % 4) ? _mm_shuffle_ps((x), (x), _MM_SHUFFLE((7-(e))%4, (6-(e))%4, (5-(e))%4, (4-(e))%4)) : x) static inline __m128 newtonraphson_rsqrt4(const __m128 v) { @@ -327,7 +313,7 @@ static inline __m128d dot_prod3(__m128d x0, __m128d x1, __m128d y0, __m128d y1) { register __m128d m1 = _mm_mul_pd(x0, y0); register __m128d m2 = _mm_mul_pd(x1, y1); - return _mm_add_pd(_mm_add_pd(vec_splat(m1, 0), vec_splat(m1, 1)), vec_splat(m2, 0)); + return _mm_add_pd(_mm_add_pd(vec_splatd(m1, 0), vec_splatd(m1, 1)), vec_splatd(m2, 0)); } static inline double dot_prod3(const sse_meta_d4& x, const sse_meta_d4& y) diff --git a/trunk/fcl/src/BV/OBBRSS.cpp b/trunk/fcl/src/BV/OBBRSS.cpp index 3a5fc39af8732f206ef1571696eda94c3885e0e0..7a703b97c095134330e69b57794b21ad19a56999 100644 --- a/trunk/fcl/src/BV/OBBRSS.cpp +++ b/trunk/fcl/src/BV/OBBRSS.cpp @@ -54,6 +54,7 @@ OBBRSS translate(const OBBRSS& bv, const Vec3f& t) OBBRSS res(bv); res.obb.To += t; res.rss.Tr += t; + return res; } diff --git a/trunk/fcl/src/BV/kIOS.cpp b/trunk/fcl/src/BV/kIOS.cpp index 2dbdce96cdba5e08c6d0e01cf86f50afe5923108..347d8c49ac17d7af5298d3c4b38069d2e1cbde37 100644 --- a/trunk/fcl/src/BV/kIOS.cpp +++ b/trunk/fcl/src/BV/kIOS.cpp @@ -88,7 +88,7 @@ kIOS& kIOS::operator += (const Vec3f& p) } obb += p; - + return *this; } kIOS kIOS::operator + (const kIOS& other) const @@ -205,6 +205,7 @@ kIOS translate(const kIOS& bv, const Vec3f& t) } translate(res.obb, t); + return res; }