0

我已經做了一個簡單的3D剛體模擬,我已經付出了一點,我需要的對象之間處理衝突。到目前爲止,使用新的DirectXMath和DirectXTK的SimpleMath一直是巨大的幫助。DirectXCollision - 獲取關於交集的更多信息的任何方式?

我一直在使用DirectXCollision庫中的BoundingBox和BoundingOrientedBox類,它們非常適合確定兩個對象是否相交,但除此之外不提供任何其他信息。我需要能夠檢索接觸點和交叉點的法線,以正確計算剛體響應。

我的問題是 - 有什麼辦法來檢索使用DirectX庫或者我應該學習它,並實現自己的做法的信息?

+2

我會探討[BulletPhysics Library](http://bulletphysics.org/wordpress/)這是[記錄這裏](http://bulletphysics.org/Bullet/BulletFull/index.html) –

+0

我曾考慮過使用庫,但我認爲這對我的問題有點沉重的解決方案。我會看看子彈雖然,似乎是其中一個更好的 – Valentin

回答

1

是,也不是。

使用DirectX數學庫,您可以獲取有關非常原始形狀(例如plane-line,plane-plane,三角形平面)相交的十字路口細節。然而,這只是基本的(「真,假」或「-1,0,1」)約更加複雜的路口,如射線箱,箱盒等

因此,解決方案信息:

  • 您可以基於DirectX數學庫原語爲盒子推出自己的交集函數。您將重新發明輪子(部分),但這可以讓您保持現有的計算代碼不變。沒有太多的代碼,但你需要密集使用護目鏡算法,並知道MSDN ref。最後,它可能非常醜陋。
  • 您可以使用其他的lib,如子彈,很多地方交叉口類型可現在。它們已經被調試並準備就緒。但是如果它是深度集成的,你可能需要用一個骯髒的內核來摧毀你所有的DirectX數學代碼。
  • 你可以像抽象(適配器)的薄層,以現有的接口。您現在或將來可以快速更換您喜歡的任何實施方案。但它必須以一種聰明的方式來完成,因爲這種額外的間接水平會減慢你的超快速數學。這是一個非常多的編碼,後來調試和痛苦,但它是值得的。

希望它可以幫助莫名其妙。 快樂編碼! ;)

+0

謝謝,滴。我想我會走最後一條路線,現在插入Bullet來進行路口檢測,並可能在後來推出我自己的路線。 – Valentin