Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00038 #ifndef FCL_BVH_UTILITY_H
00039 #define FCL_BVH_UTILITY_H
00040
00041 #include "fcl/BVH/BVH_model.h"
00042
00043
00044 namespace fcl
00045 {
00047 template<typename BV>
00048 void BVHExpand(BVHModel<BV>& model, const Variance3f* ucs, FCL_REAL r)
00049 {
00050 for(int i = 0; i < model.num_bvs; ++i)
00051 {
00052 BVNode<BV>& bvnode = model.getBV(i);
00053
00054 BV bv;
00055 for(int j = 0; j < bvnode.num_primitives; ++j)
00056 {
00057 int v_id = bvnode.first_primitive + j;
00058 const Variance3f& uc = ucs[v_id];
00059
00060 Vec3f& v = model.vertices[bvnode.first_primitive + j];
00061
00062 for(int k = 0; k < 3; ++k)
00063 {
00064 bv += (v + uc.axis[k] * (r * uc.sigma[k]));
00065 bv += (v - uc.axis[k] * (r * uc.sigma[k]));
00066 }
00067 }
00068
00069 bvnode.bv = bv;
00070 }
00071 }
00072
00074 void BVHExpand(BVHModel<OBB>& model, const Variance3f* ucs, FCL_REAL r);
00075
00077 void BVHExpand(BVHModel<RSS>& model, const Variance3f* ucs, FCL_REAL r);
00078
00080 void getCovariance(Vec3f* ps, Vec3f* ps2, Triangle* ts, unsigned int* indices, int n, Matrix3f& M);
00081
00083 void getRadiusAndOriginAndRectangleSize(Vec3f* ps, Vec3f* ps2, Triangle* ts, unsigned int* indices, int n, Vec3f axis[3], Vec3f& origin, FCL_REAL l[2], FCL_REAL& r);
00084
00086 void getExtentAndCenter(Vec3f* ps, Vec3f* ps2, Triangle* ts, unsigned int* indices, int n, Vec3f axis[3], Vec3f& center, Vec3f& extent);
00087
00089 void circumCircleComputation(const Vec3f& a, const Vec3f& b, const Vec3f& c, Vec3f& center, FCL_REAL& radius);
00090
00092 FCL_REAL maximumDistance(Vec3f* ps, Vec3f* ps2, Triangle* ts, unsigned int* indices, int n, const Vec3f& query);
00093
00094
00095 }
00096
00097 #endif