Classes of Objects & Problems(对象与问题的分类)
- 2D vs. 3D
- 2D 更简单,比如点在多边形内、线段相交等
- 3D 要处理体积、表面法线、三角形网格等复杂情况
- Convex vs. Non-Convex
- 凸形状:任意两点连线在内部(好处理)
- 非凸形状:可能凹陷、洞,需要分解成多个凸形
- Polygonal vs. Non-Polygonal
- 多边形:顶点和边定义的网格(游戏建模常用)
- 非多边形:比如隐式表面、体素数据(医学/模拟常见)
- Open surfaces vs. Closed volumes
- 开放面:有边界的,比如布料、网格片段
- 闭合体积:封闭的固体,能判断“物体是否穿进去”
- Geometric vs. Volumetric
- 几何建模:顶点、边、面(B-Rep)
- 体积建模:体素、Signed Distance Field 等
- Rigid vs. Non-rigid
- 刚体:不会变形,运动仅限于平移+旋转
- 非刚体:可以弯曲、压缩,比如果冻、布、肌肉
- Pairwise vs. Multiple (N-Body)
- 一对一检测:只看 A vs B
- 多体系统:很多物体互相检测,需要加速结构(如八叉树)
- CSG vs. B-Rep
- CSG:通过布尔操作构造体(组合基本体)
- B-Rep:明确用边界来表示体(顶点、边、面)
- Static vs. Dynamic
- 静态:场景不变,只需检测一次或离线
- 动态:物体在移动、变形,需要每帧检测
Some Possible Approaches(可能的方法)
- Geometric Methods
- 几何分析,比如点到面距离、交叉测试、凸包判断
- 常用于刚体、网格物体检测
- Algebraic Techniques
- 用数学公式解方程判断是否交叉
- 比如曲线交点、隐式表面零点计算,精度高但计算复杂
- Hierarchical Bounding Volumes
- 给复杂模型套简单体积,比如包围盒、球
- 构造成层级结构(BVH)加速检测,越往下越精细
- Spatial Partitioning
- 把空间分成网格或树状结构,减少无效检测
- 比如 Uniform Grid, Octree, KD-Tree,用于高密度场景
- Others(优化方法)
- 启发式、优化算法、甚至机器学习用于预测碰撞可能性
- 一般用于复杂或实时性能要求高的系统