我在過去幾年中編寫了自己的3D遊戲引擎,並希望將其用於遊戲。地形對象碰撞檢測
我迷迷糊糊accros以下問題:
我在遊戲的多面,但講起一個單一的平面。當然,飛機不能潛入地面並在地形下飛行。因此,我需要實施一些能夠檢測飛機/噴氣機與我的地面之間的碰撞的東西。
給出的信息如下:
- 網格地形[2-維陣列;在根據X專賣店高度,z座標]
- 擊中格我的飛機(它的動作與我的飛機,所以邊界等等都已經計算和給予)
所以對hitboxes的: 我雖然約使用哪種方法。表現最好的一個似乎是不同半徑的簡單球體。
所以我現在需要的是最佳的類型擊中格的(球體,AABB,...),並且根據最有效的計算。
我的嘗試是讓每個周圍的三角形,並計算從那一個到我的hitbox球體的每個中心的距離。如果距離小於半徑,則它已成功檢測到碰撞。但是當我在我的飛機上有多達10/20個球體並且需要檢查100個三角形時,這需要很長時間。
另一個嘗試是從每個hitbox球體獲得與地面的垂直距離。這需要更少的計算,但靠近陡峭的表面時會失敗。
我將非常高興,如果有人願意幫助我實現平面/地形碰撞檢測:)
回答這個問題會非常廣泛。您應該閱讀[Octree](https://en.wikipedia.org/wiki/Octree) - 另請參閱[用於高效碰撞檢測的最佳算法](https:// stackoverflow。com/questions/7107231/best-algorithm-for-efficient-collision-detection-objects-objects)和[八叉樹中的邊界框](https://gamedev.stackexchange.com/questions/25626/bounding-boxes-in- octrees) – Rabbid76
渲染的飛機,你可以在着色器中做到這一點。我假設在對象之前渲染地形,所以一旦你試圖在平面下面渲染平面片段(測試前一次傳遞的預存深度紋理),就會發生碰撞,因此可以將平面ID輸出到某些1D紋理輸出或其他任何東西。這種方式是完美的像素,甚至可以提供命中的位置。 – Spektre
爲了提高我的着色器速度,我預先計算了每個頂點的高度。所以沒有「深度紋理」。我也可能在從我的身高地圖上閱讀後更改頂點位置。 – Luecx