关于BVH的介绍可以参考
https://blog.youkuaiyun.com/StevenZhai0504/article/details/28420195
在这里参考代码
https://github.com/sglab/OpenCCD.git
这里实现我实现的是一个模仿这个的碰撞检测加速的BVH。因为布料的性质,往往碰撞的情况会出现在相邻的位置(这里可以想象自己身上的衣服?),因此在划分的时候可以简单的采用距离的划分,然后我这里建立的是一块方形的布所以做的是一个‘田’的划分。
而在原文中,进行划分的依据是AABB包围盒哪个轴比较长。对于长轴进行划分(好像是,没有看的非常仔细)
类的定义
class BVH_Node {
public:
bool isleaf; //判断是不是叶节点
Vec3d minBox, maxBox; //确定包围盒
int node[3]; //如果是叶节点,记录对应的三个点的index
BVH_Node *_leftChild; //对于非叶节点记录左右子节点
BVH_Node *_rightChild;
public:
//非叶节点的初始化
BVH_Node(int startX, int startY, int endX, int endY);
//叶节点的初始化
BVH_Node(int index1, int index2, int index3);
~BVH_Node();
//重新计算包围盒
void refit();
/* CCD */
//非叶节点的碰撞检测
void collide(BVH_Node *target);
//叶节点的碰撞检测
bool leaf