0

我一直在做一个简单的 3D 刚体模拟器,现在我需要处理对象之间的碰撞。到目前为止,将新的 DirectXMath 与 DirectXTK 的 SimpleMath 一起使用是一个巨大的帮助。

我一直在使用 DirectXCollision 库中的 BoundingBox 和 BoundingOrientedBox 类,它们非常适合确定两个对象是否相交,但除此之外不提供任何更多信息。我需要能够检索接触点和交点法线,以便正确计算刚体响应。

我的问题是 - 有没有办法使用 DirectX 库检索该信息,或者我应该学习它并实施我自己的方法?

4

1 回答 1

1

是和不是。

使用 DirectX 数学库,您可以获得关于非常原始形状与非常原始形状(例如plane-lineplane-plane、 triangle-plane )相交的交集细节。但是你只有基本的(“true, false”或“-1, 0, 1”)关于更复杂的交叉点的信息,比如ray-box,box-box等。

所以,解决方案:

  • 您可以基于 DirectX 数学库原语为框推出自己的交集函数。您将(部分)重新发明轮子,但这将允许您保持现有的计算代码不变。代码不多,但您需要大量使用 goggle 进行算法,并牢记 MSDN ref。最后,它可能真的很丑。
  • 您可以使用另一个库,例如 Bullet,现在有很多交叉点类型可用。他们已经调试好并准备好了。但是,如果 DirectX 数学代码被深度集成,您可能需要用肮脏的胆量撕掉所有的 DirectX 数学代码。
  • 您可以为现有接口制作一层薄薄的抽象层(适配器)。现在或将来,您将能够快速交换您喜欢的任何实现。但它必须以一种聪明的方式完成,因为这种额外的间接级别会减慢你的超快速数学。这是一个相当多的编码和后来的调试和痛苦,但它是值得的。

希望它以某种方式有所帮助。快乐编码!;)

于 2013-12-12T07:56:04.810 回答