3D游戏的碰撞检测是如何实现的?
物理引擎的碰撞計算是物理引擎性能消耗的部分之一,物理引擎如何高效的做好物理碰撞計算與物理引擎內核如何標準的處理碰撞檢測流程(pipeline),詳細的步驟如下:
(1) BroadPhase 快速粗略碰撞檢測。 通過這個步驟,快速的計算篩選出來可能產生碰撞的物理Entity碰撞對(Entity Collison Pair)。要實現這個設計目標我們可以從物體與場景入手,可以簡化物體的形狀來做碰撞檢測,通過物理場景,快速的排除掉不可能發生碰撞的物體,從而替代簡單的暴力搜索O(n^2)。每個物理Entity都有自己的包圍盒,能包圍住整個物理Entity的形狀,當兩個物理Entity的包圍盒有重疊的時候,物理引擎會產生一個潛在可能的碰撞對,如圖1.6-1
圖1.6-1
找到這個碰撞對后,就會把物理碰撞對加入到物理世界的碰撞列表中,來進行下一步計算。
(2) NarrowPhase 精確的計算碰撞,生成碰信息。經過第一步的粗略計算,找出來了可能發生碰撞的物理Entity碰撞對。接下來就是要根據物理Shape形狀與角度來精確的計算出來是否有真實的碰撞以及詳細的碰撞點位置,表面法線信息等。注意不是所有的碰撞對都會產生碰撞,如上圖1.6-1所示,BroadPhase階段產生了碰撞,但是NarrowPhase階段,卻發現沒有產生碰撞。
(3) Collision Respones階段: 物理碰撞系統的最后一個階段就是迭代計算出碰撞對每個物理Entity運動改變的影響。因為物理引擎中不允許兩個物理Entity穿透。所以碰撞后就會改變物理Entity的運動狀態。
?
總結
以上是生活随笔為你收集整理的3D游戏的碰撞检测是如何实现的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python画星空源代码
- 下一篇: matlab三个商人三个随从,商人们怎样