DirectXCollision - 获取有关交叉点的更多信息的任何方式?

时间:2013-12-09 07:09:10

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

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

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

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

1 个答案:

答案 0 :(得分:1)

是和否。

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

所以,解决方案:

  • 您可以根据DirectX数学库原语为盒子推出自己的交集函数。您将重新发明轮子(部分),但这将允许您保持现有的计算代码不变。与代码无关,但您需要密集使用goggle进行算法,并且明确地了解MSDN ref。最后,它可能真的很难看。
  • 您可以使用另一个lib,例如Bullet,其中现在有大量的交叉点类型可用。它们已经过调试并准备好了。但是,如果深度集成,你可能需要将所有DirectX数学代码都用脏的内容撕掉。
  • 您可以为现有界面制作类似于抽象(适配器)的薄层。您现在或将来都可以快速交换您喜欢的任何实现。但它必须以一种聪明的方式完成,因为这种额外的间接水平会降低你的超快数学速度。它是一个相当多的编码和后来的调试和痛苦,但它是值得的。

希望它有所帮助。 快乐的编码! ;)