使用MeshGeometry3D进行碰撞检测

3
我正在创建一个类似CAD的程序,用于创建modelvisual3D对象。我如何使用MeshGeometry3D在我的对象(modelvisual3d)之间进行碰撞检测?我是否需要将移动对象中的每个三角形与静止对象进行比较?
最佳的碰撞检测方式是什么?
4个回答

0
另一个选择是使用BulletSharp,这是一个C#封装的著名Bullet Physics Engine。在这种情况下,您需要编写函数来从MeshGeometry3D创建(凹)碰撞形状。
根据我的经验,它运行得相当不错,尽管不支持凹形状之间的动态碰撞。您需要使用凸分解作为解决方法。

0

这取决于您的碰撞检测需要多精确。

WPF的3D库中没有内置的碰撞检测。如果您需要高精度,您需要比较每个三角形。

话虽如此,您可以从比较包围盒和/或包围球开始。这通常是一个很好的第一步,因为它可以快速排除大多数情况。如果您不需要精确的碰撞检测,仅使用此方法可能就足够了。


0

为了补充Reed的答案(基于我的这里的回答):

在通过包围盒/球与另一个物体进行碰撞测试时,你应该先测试测试对象的三角形与另一个物体的包围盒/球之间的碰撞。这样可以消除更多的情况。

要排除碰撞,你需要检查测试对象中的所有三角形,但要找到需要进一步进行三角形/三角形碰撞测试的案例,你只需要找到与另一个物体的包围盒/球有交互作用的第一个三角形即可。


0

看看SAT定理(分离轴定理),它是最快和最简单的。

这个理论是,如果你可以画一条分隔三角形的线,那么它们就不会碰撞。

正如所说,先进行AABB早期检测,当两个对象发生碰撞时,测试对象A的每个多边形与对象B的每个多边形。

从2D开始,要测试两个多边形是否相撞,您需要在可能的轴(在本例中为X和Y)上获取它们的范围,如果这些范围相交,则多边形相撞。

在此页面上,您可以找到一个非常好的解释,以及如何应用它: http://www.metanetsoftware.com/technique/tutorialA.html

要将其应用于3D,只需使用每个多边形的边作为分离轴。如果这些轴上的范围相交,则多边形相撞。

此外,该方法还解决了移动对象的碰撞问题,并给出了碰撞的动量(解决相对角速度,从速度B中减去速度A,这样问题就被简化为一个移动对象和一个静态对象,在测试轴上添加多边形A的范围内的速度,如果它们相交,则重置多边形的原始范围并得到碰撞的动量)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接