我需要檢查一個框是否與球體碰撞。我有一個用x,y,z,寬度,高度,深度定義的BoundingBox類。我也有一個用x,y,z,radius定義的BoundingSphere類。如何檢查它們是否相交?框與球碰撞
框與球碰撞
回答
如果您想保持測試的水平,您可以在寬度,高度和深度= 2r的球體周圍放置邊界框。當然,這承認球體上「非極性」或「非赤道」點的碰撞誤報風險。爲了解決這個問題,你可以考慮構建一系列層次邊界框來增加這些問題區域中命中測試的粒度。
您可能還會從渲染級別解決問題。由於您無法渲染球體,因此通常會使用某種多邊形網格。在2D(或3D)多邊形之間進行打擊測試是一項直接的練習。
不錯的發現,鏈接是最新的,涵蓋多個案例。實體盒實體球算法是我見過的大多數遊戲引擎使用的(以各種優化形式)。 – Kaganar 2013-05-14 21:58:12
你只需要檢查邊界框的所有角落與球體中心的距離。這是一些僞代碼:
bool collidesWith(BoundingBox b, BoundingSphere s) {
for(Vertex v in b) {
if(distanceBetween(v, s.center) <= s.radius)
return true;
}
return false;
}
首先要檢查的是BoundingSphere的BoundingBox是否相交。這是因爲這是一個排除更復雜數學的簡單方法。
下一步將採用邊界框的六個平面(或十二個三角形)中的每一個,並對它們執行從點到多邊形測試的距離到球體的中心。如果其中一個小於球體的半徑,那麼你有一個命中。
多邊形,以點距離Matlab代碼:http://www.mathworks.com/matlabcentral/fileexchange/12744-distance-from-a-point-to-polygon
有由吉姆·帕特在圖形寶石的一章。
我想上面陳舊的鏈接用來指向他的代碼,因爲URL中有「arvo」。這link作品 - 至少現在。
- 1. 粒子(布)與球碰撞
- 2. 球線碰撞
- 3. Javascript球碰撞
- 4. 球碰撞問題
- 5. 球對球碰撞 - 在碰撞時獲得顯着的速度
- 6. 球碰撞問題,只有一半的球碰撞
- 7. 看似簡單的球與線碰撞?
- 8. 多個球與碰撞檢測
- 9. 球與方塊之間的碰撞
- 10. 框與圓碰撞AS3
- 11. AABB vs球體碰撞
- 12. 球和橢圓碰撞
- 13. 彈跳球的碰撞
- 14. 簡單的球槳碰撞
- 15. 球和磚碰撞處理
- 16. 乒乓球碰撞問題
- 17. 球碰撞JS公式
- 18. Java「簡單」撞球/碰撞練習
- 19. SurfaceView與碰撞
- 20. OnPageIndexChanged與OnItemCommand碰撞
- 21. 與錨點碰撞
- 22. 與Capsule Collider碰撞
- 23. get_driver_instance()與Qt碰撞
- 24. 兩個球之間的碰撞
- 25. java彈跳球碰撞不起作用
- 26. 碰撞檢測不註冊球
- 27. 邊界球碰撞不起作用
- 28. 碰撞時更改球的顏色
- 29. 統一:球員死在物體碰撞
- 30. 球和線描和碰撞檢測iPhone
可能的重複:http://stackoverflow.com/questions/4578967/cube-sphere-intersection-test(雖然主題那裏說「立方體」,答案適用於所有軸對齊框)。 – 2011-02-25 20:33:50