我正在为我的研究开发一个相当初级的刚体物理模拟器。我需要非常细粒度的碰撞检测。也就是说,我需要网格的碰撞多边形的XYZ点。我不能只是将网格封装在粗略的边界体积中,并将碰撞响应建立在它们的基础上。
因此,对于具有大量多边形的网格,我显然需要一个BVH (或类似的东西)。我需要帮助的是一个算法,我可以在预处理步骤中运行,从网格生成BVH。我的背景是游戏,到目前为止,我找到的所有资源都将整个网格包裹在凸多面体中,而不是测试网格本身。这是因为游戏可以逃脱像这样的粗糙物理。
我目前正在阅读Ericson的实时碰撞检测,这非常有帮助,但我想知道是否有人知道任何专门处理这个问题的书籍/论文。
我还计划从多边形生成AABB。在遍历BVH时的每一帧,我将通过刚体的变换矩阵来变换AABB,创建OABB。然后我会测试OABB的交叉点。我还没有实现这一点,目前还只是理论上的。如果任何人有这样做的经验,任何提示或更有效的算法将非常感谢!
发布于 2012-03-17 13:05:12
性能的一个有利因素是使用线性编程技术来实现最优化和点数减少。一个这样的求解器是GJK或Gilbert, Johnson Keerthi求解器。
还有其他的simplice求解器,但是当涉及到NP完全问题的优化时,它仍然是一个有效的研究主题,可以讨论。
发布于 2018-12-28 17:16:46
您可以实现三角形缓存,这是一种非常简单的技术。从本质上讲,您可以从冲突的两个BVH中保存一对叶节点。下次检查这两个BVH之间的冲突时,首先立即测试保存的两个叶节点。如果帧到帧的一致性很高,这通常是游戏的情况,那么您可能会在没有测试两个BVH的情况下检测到冲突!
UNHC gamma已经发表了几篇提到/描述三角形缓存的论文。例如,参见this paper (我认为它非常具有可读性!)。
https://stackoverflow.com/questions/6951636
复制相似问题