2011-08-14 56 views
2

我只需要一種方法告訴我3D中的軸對齊邊界框是否與線段(不是光線)相交。我不需要交點。簡單的3D AABB線段碰撞檢測(交點)

盒由2個對角點定義,並通過其起點和終點的線段,像這樣:

Boolean intersection(Vector3 boxStart, Vector3 boxEnd, Vector3 segmentStart, Vector3 segmentEnd){...} 

我已經做了很多的研究,還沒有能夠找到一個我能理解或至少可以使用的代碼(希望在C#或Java中)。我需要的方法,而不是一個圖書館,將完成這項工作...

我的問題是,它需要100%的精確,如果該部分只是觸及框(即他們共享一個點),它必須返回假。例如,如果分段是框的邊緣之一或穿過角落,它們不會相交。

由於

+1

http://www.gamedev.net/topic/338987-aabb---line-segment-intersection-test/。如果你想排除「只是觸摸」的情況下,使用'<' and '>'測試。如果您想包含它們,請使用'<=' and '> ='測試。 –

+0

@Merlyn我唯一不明白的就是epsilon。我發現它,但在我看來,它不是100%準確的,我不知道要使用哪個epsilon ... – Nicolas

+0

「該epsilon是處理退化的交叉產品,如果段幾乎平行於一個箱子軸線「。 - 如果你能夠在不浪費很多週期的情況下檢測到退化情況,那麼你可以避免使用epsilon。 –

回答

2

在Java中,任一方法intersects()是候選;但由於實施限制,您需要使用Line2D進行測試。

+0

是的,但那是在2D ...我如何使用它的3D? – Nicolas

+0

啊,我在研究原文的時候[問題改變](http://stackoverflow.com/posts/7054210/revisions)。我想知道爲什麼其他有用的答案已被刪除。您選擇的3D圖書館是否有相關的原始圖書? – trashgod

+0

我沒有真正的3D庫,只有一些類和基本的方法... – Nicolas