从何处开始在边界体积层次结构中封装3D网格

时间:2011-08-05 04:59:27

标签: collision-detection simulation physics

我正在研究一个相当基本的刚体物理模拟器。我需要非常精细的碰撞检测。也就是说,我需要XYZ点的网格碰撞多边形。我不能将网格封装在粗糙的边界体积中,并将碰撞响应基于它们。

因此,对于具有大量多边形的网格,我显然需要BVH(或等效的东西)。我需要帮助的地方是我可以在预处理步骤中运行的算法,该步骤从网格生成BVH。我的背景是游戏,到目前为止我找到的所有资源都将整个网格包裹在凸多面体中,并且不会像测试网格本身一样。这是因为游戏可以摆脱这种粗糙的物理现象。

我目前正在阅读Ericson的实时碰撞检测,这非常有帮助,但我想知道是否有人知道任何专门处理此问题的书籍/论文。

我还计划从多边形生成AABB。遍历BVH的每个帧我将通过刚体的变换矩阵变换AABB,从而创建OABB。然后我会测试OABB的交叉点。我还没有实现这个,现在都是理论上的。如果有任何人有这方面的经验,任何提示或更有效的算法将不胜感激!

2 个答案:

答案 0 :(得分:0)

性能的一个优势是使用线性编程技术来实现最优性和点减少。一个这样的解算器是GJK或Gilbert, Johnson Keerthi求解器。

还有其他的简化求解器,但实际上在优化NP完全问题时,它仍然是一个有效的研究课题,可供讨论。

答案 1 :(得分:0)

您可以实现三角缓存,这是一种非常简单的技术。本质上,您可以从两个冲突的BVH中保存一对叶节点。下次检查这两个BVH之间是否存在冲突时,请立即测试已保存的两个叶节点。如果帧对帧的一致性很高(游戏通常就是这种情况),那么很有可能您无需检测两个BVH就可以检测到碰撞!

UNHC伽玛发表了几篇提到/描述三角加工的论文。例如,请参见this paper(我认为它非常可读!)。