我希望在我的跟踪管道中有一个碰撞检测模块,用于检测两个不同的网格体何时碰撞/相互渗透,或者是否存在铰接网格体的自渗透。根据渗透的深度,应该对这种现象进行惩罚。为此,我应该获取碰撞面/顶点的列表。
在检查了几个选项后,我决定开始使用 CGAL .
在 this link有一个有趣的答案指出了一些例子。 ( this 和 this )。这些示例使用 AABB(轴对齐边界框),这是针对非刚性网格提出的方法,因为需要频繁更新它们。对于自相交的情况,示例很清楚,但以下内容对我来说不是很清楚:
- 除了为每个三角形创建一个 B.Box 之外,我猜想在幕后没有创建树结构来加速搜索过程。是这样吗?如果是,有什么提示吗?
- 如果有 2 个单独的网格,我想将所有三角形/盒子合并到一个向量中并遵循示例并不好(尽管提到 here 作为解决方案,但听起来不太优雅)。有什么好的练习建议吗?应该混合these例如,通过创建三角形/盒子树?尽管对于 AABB 树,提到:
Note that this component is not suited to the problem of finding all intersecting pairs of objects. We refer to the component Intersecting Sequences of dD Iso-oriented Boxes which can find all intersecting pairs of iso-oriented boxes.
最佳答案
- 函数CGAL::box_intersection_d动态创建线段树,以加快相交 AA 边界框对的计算速度。
- 据我所知,推荐的方法是将两个曲面合并到一个向量 custom boxes 中。 ,其中方框有一个字段来指示三角形所属表面的标识符。这有助于快速丢弃同一表面上的成对盒子。
关于3d - CGAL 网格体相交/碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900932/