三角形到三角形碰撞检测

时间:2011-01-13 15:21:00

标签: collision-detection

我理解三角形到三角形的碰撞检测两个三角形。 有人可以解释我如何使用由1000个顶点组成的3D对象? 如何为每个网格创建三角形列表? 我是否必须采用每个顶点的排列? 这将导致O(n ^ 3),我发现非常糟糕。

我如何概括这一点?

我需要从格式中读取数据。如果所有其他方法都失败了,有人会建议一种格式,使三角形的网格?我还需要一个网格目录作为格式,至少对于初学者来说。

非常感谢。

2 个答案:

答案 0 :(得分:4)

您可以应用许多优化来检测网格之间的碰撞:

  • 空间分区,如James所述。

  • 使用bounding volumes提前拒绝。例如,球面碰撞是便宜的,所以在测试网格A和B是否发生碰撞之前,您可能会看到围绕A的球体是否与围绕B的球体发生碰撞。如果球体错过,显然网格不会碰撞,所以没有需要测试它们。不同种类的物体可能需要不同类型的边界体积:轴对齐的长方体和圆柱体很常见。

  • 证人的缓存。在某些碰撞测试中,您最终会计算碰撞的“见证”,例如,当您应用separating axis test计算分离轴时。如果一个轴在时间 t 时将两个对象分开,那么它可能会在 t +δ时继续将它们分开,因此它可以支付缓存您找到的轴并尝试下次第一次(见图形宝石IV 中的Rabbitz,“移动凸多面体的快速碰撞检测”)。

答案 1 :(得分:1)

http://en.wikipedia.org/wiki/Binary_space_partitioning

BSP树是检查静态网格物体碰撞的一种非常有效的方法,但它确实需要对网格物体进行一些预处理,以确保没有三角形相交。它的工作原理是将网格划分为半空间。这使碰撞检查和物理更容易。

编辑:

我觉得我也应该提到八叉树。与BSP树相同,但它将模型划分为递归较小的立方体而不是半空间。

http://en.wikipedia.org/wiki/Octree

在回答您的第二个问题时,您可能正在寻找类似.obj文件格式的内容。

http://en.wikipedia.org/wiki/Wavefront_.obj_file

相关问题