我正在创建一个类似计算机辅助设计的程序,创建modelvisual3D对象。如何使用MeshGeometry3D在对象(Modelvisual3d)之间进行碰撞检测。我必须将运动物体中的每个三角形与静止物体进行比较吗?
我做碰撞检测的最佳方法是什么?
发布于 2009-08-19 16:34:36
这取决于碰撞检测的精确度。
WPF的3D库中没有内置的碰撞检测。如果你需要高精度,你需要比较每个三角形。
也就是说,您可以从比较边界框和/或边界球体开始。这始终是一个很好的第一步,因为它可以快速消除大多数情况。如果您不需要精确的碰撞检测,这一点可能就足够了。
发布于 2009-08-19 16:41:58
补充里德的答案(基于我的answer here):
在通过边界框/球体到边界框/球体测试消除了大多数对象之后,在检查三角形/三角形碰撞之前,您应该首先针对其他对象的边界框/球体测试测试对象的三角形。这将消除更多的情况。
要排除碰撞,必须检查测试对象中的所有三角形,但要找到需要转到三角形/三角形情况的情况,只需找到与另一个对象的边界框/球体交互的第一个三角形。
发布于 2009-08-25 13:10:51
看看SAT定理(分离轴定理),它是最快、最简单的定理。
关于这一点的理论是,如果你能画一条线来分隔三角形,那么它们就不会发生碰撞。
如上所述,首先进行AABB早期检测,并且当两个对象发生碰撞时,针对对象B的每个多边形测试对象A的每个多边形。
从2D开始,为了测试两个多边形是否发生碰撞,您可以获得它们在可能轴(在本例中为X和Y)上的范围,如果这些范围相交,则多边形会发生碰撞。
在这个页面上,你可以找到一个关于它如何工作以及如何应用它的非常好的解释:http://www.metanetsoftware.com/technique/tutorialA.html
要将其应用于3D,只需使用每个多边形的边缘作为分隔轴。如果这些轴上的范围相交,则多边形将发生碰撞。
此外,此方法解决了移动对象的碰撞,也给出了碰撞的动量(从速度A中解析相对角速度,减去速度B,这样问题就简化为运动对象和静态对象,并将正在测试的轴上的速度添加到多边形A的范围,如果它们相交,则休息多边形的原始范围,您将获得碰撞的动量)。
https://stackoverflow.com/questions/1301095
复制相似问题