3
A
回答
6
最簡單的選擇是使用Vector3的distanceTo()或distanceToSquared函數在兩個對象之間的歐氏距離。
例如
console.log(yourCube.position.distanceToSquared(yourSphere.position));
如果兩個物體之間的距離大於球體半徑與立方體邊之間的距離,那麼這將是潛在的碰撞。我還建議distanceToSquared,因爲它更快(因爲它不調用sqrt),並且它對檢查衝突仍然有用。
注意該方法不是超精確的 - 它本質上是檢查兩個球體之間的碰撞(估計立方體是一個半徑等於立方體一半的球體),但我希望它足夠接近/足夠好對於你的設置,因爲它是我認爲最容易和最快的實現。
您可能會注意到,立方體的角落將會碰撞,而不會觸發碰撞,直到達到一定的距離。您可以通過傳遞不同的立方體比例來調整「閾值」。想象一下你的立方體周圍有一個球體,這個球體的比例應該有多大才能爲你的設置獲得一個合適的估計碰撞。
想到的另一種方法是找到最接近立方體球點:
- 你知道可以通過減去得到球的中心到立方體的中心點兩個位置矢量
- 通過對上述差異向量進行歸一化,並通過球面半徑對它進行縮放,您可以獲得立方體方向上的球體上的點。然後,您可以檢查該點是否在立方體內部(通過檢查如果座標位於立方體的軸對齊邊界框(AABB)內
例如
var pointOnSphere = yourSphere.position.clone().sub(yourCube.position).normalize(). multiplyScalar(yourSphereRadius);
這要是把我的頭頂部,所以我不能保證上面的代碼將工作,可能是值得放置在pointOnSphere座標粒子首先檢查。
在3D中還有其他更高級的碰撞檢測算法,您可以在this book中查看,但最好儘量保持簡單/快速。
2
不幸的是,three.js沒有任何碰撞檢測器:Collision detection?。
我想你需要使用插件庫。像這樣:http://yomotsu.github.com/threejs-examples/cannonjs_box/。
相關問題
- 1. three.js所Raycaster碰撞檢測與球體
- 2. 檢測網格和球體之間的碰撞點?
- 3. 碰撞檢測旋轉立方體
- 4. 非零半徑球體之間的碰撞檢測
- 5. n體碰撞檢測和成對碰撞檢測之間的區別?
- 6. 碰撞檢測 - 移動球體和圓柱體之間的響應
- 7. 球之間的碰撞檢測javascript
- 8. Pygame中的圖像和物體之間的碰撞檢測
- 9. 如何檢測three.js中的碰撞?
- 10. 球體 - 球體碰撞檢測 - >反應
- 11. Unity 3D:目標和球體之間的碰撞檢測不工作(3d),目標和球體之間的碰撞不工作
- 12. FLEX:我如何檢測物體之間的視覺碰撞?
- 13. 如何檢測快速移動之間的碰撞物體
- 14. 補間物體上的碰撞檢測
- 15. 非方形物體的碰撞檢測
- 16. 檢測相機和網格物體之間的碰撞
- 17. 檢測領域和三角形之間的碰撞在three.js所
- 18. Three.js使用Ray檢測2個移動物體之間的碰撞
- 19. 球對球碰撞檢測
- 20. 物理體碰撞檢測
- 21. 球之間的碰撞
- 22. Andengine碰撞 - 檢測碰撞和刪除物體時的例外
- 23. 追逐玩家的實體之間的碰撞檢測
- 24. Three.js碰撞檢測問題
- 25. 體素世界中的碰撞檢測?
- 26. 碰撞檢測中體素的世界
- 27. 球與方塊之間的碰撞
- 28. 二維碰撞n體模擬(大量球的快速碰撞檢測)
- 29. 如何檢查球和線之間的碰撞
- 30. box2d,如何檢測靜態和動態物體之間的碰撞
謝謝,但計算距離只適用於這些簡單的對象。那麼three.js中有沒有內置的碰撞檢測器? – 2012-07-10 19:56:56
內置?從來沒聽說過。如果你看看[three.js示例](http://mrdoob.github.com/three。js /)ZombiesVSCows使用歐幾里得距離(儘管sqrt和牛與當前殭屍位置向量之間的區別是手工實現的)。對於更復雜的東西,你可以推出你自己的或者嘗試像[Physijs](http://chandlerprall.github.com/Physijs/examples/shapes.html) - 看看支持的形狀。我沒有時間玩這個,但也許[ConvexMesh](https://github.com/chandlerprall/Physijs/blob/master/physi.js#L667)可以幫助其他形狀。 – 2012-07-10 21:45:02