// 以 A 为根节点的子树内部相交 Process_Node(A) { For every A’s child: B Process_Node(B); For every A’s children pair <B, C> if B and C intersect Process_Pair(B, C); }
// 以 B,C 为根节点的子树之间相交 Process_Pair(B, C) { For every B’s child: B’ For every C’s child: C’ if B’ and C’ intersect Process_Pair(B’, C’); }
局限性
虽然能够很快的提出远处不相交的物体,但是对周围的物体(靠的比较近)很难剔除
基于能量(形变)的碰撞检测
Zheng and James. 2012. Energy-based Self-Collision Culling for
Arbitrary Mesh Deformations. TOG (SIGGRAPH)
对比
SH(Spatial Hashing)
很容易实现
GPU 友好
当物体移动的时候需要重新计算
BVH
实现复杂
GPU 不友好(对树结构不太友好)
更新起来比较简单(只需要更新 BV)
Collision Test
DCD:Discrete Collision Detection
离散碰撞检测
基本检测单位为 edge-triangles 对
CCD:Continuous Collision Detection
连续碰撞检测
基本检测单位为 vertex-triangle 对和
edge-edge 对
DCD
在每一个离散的时刻上检测是否存在碰撞
DCD tests if any intersection exists in each state at discrete time
instant: \(\mathbf{x}^{[0]},\mathbf{x}^{[1]},\cdots\)