【问题标题】:DirectXCollision - any way of getting more information about intersection?DirectXCollision - 有什么方法可以获取更多关于交叉路口的信息?
【发布时间】:2013-12-09 07:09:10
【问题描述】:

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

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

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

【问题讨论】:

  • 我会探索类似BulletPhysics Library 的东西,即documented here
  • 我曾考虑过使用库,但我认为这对于我的问题来说有点沉重。不过我会看看子弹,似乎是更好的子弹之一

标签: directx collision-detection collision directx-11 directxmath


【解决方案1】:

是的,不是的。

使用 DirectX 数学库,您可以获得关于非常原始形状与非常原始形状相交的交集详细信息,例如 plane-lineplane-plane、三角形平面。但是您只有关于更复杂的交叉点(如光线盒、盒子盒等)的基本(“真、假”或“-1、0、1”)信息。

所以,解决方案:

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

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

【讨论】:

  • 谢谢你,Drop。我想我会选择最后一条路线,现在插入 Bullet 以进行交叉路口检测,以后可能会自己动手。
猜你喜欢
  • 2013-03-26
  • 1970-01-01
  • 2020-06-14
  • 2019-01-11
  • 2019-10-06
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多