3D游戏的碰撞检测是如何实现的?
物理引擎的碰撞計(jì)算是物理引擎性能消耗的部分之一,物理引擎如何高效的做好物理碰撞計(jì)算與物理引擎內(nèi)核如何標(biāo)準(zhǔn)的處理碰撞檢測流程(pipeline),詳細(xì)的步驟如下:
(1) BroadPhase 快速粗略碰撞檢測。 通過這個(gè)步驟,快速的計(jì)算篩選出來可能產(chǎn)生碰撞的物理Entity碰撞對(Entity Collison Pair)。要實(shí)現(xiàn)這個(gè)設(shè)計(jì)目標(biāo)我們可以從物體與場景入手,可以簡化物體的形狀來做碰撞檢測,通過物理場景,快速的排除掉不可能發(fā)生碰撞的物體,從而替代簡單的暴力搜索O(n^2)。每個(gè)物理Entity都有自己的包圍盒,能包圍住整個(gè)物理Entity的形狀,當(dāng)兩個(gè)物理Entity的包圍盒有重疊的時(shí)候,物理引擎會(huì)產(chǎn)生一個(gè)潛在可能的碰撞對,如圖1.6-1
圖1.6-1
找到這個(gè)碰撞對后,就會(huì)把物理碰撞對加入到物理世界的碰撞列表中,來進(jìn)行下一步計(jì)算。
(2) NarrowPhase 精確的計(jì)算碰撞,生成碰信息。經(jīng)過第一步的粗略計(jì)算,找出來了可能發(fā)生碰撞的物理Entity碰撞對。接下來就是要根據(jù)物理Shape形狀與角度來精確的計(jì)算出來是否有真實(shí)的碰撞以及詳細(xì)的碰撞點(diǎn)位置,表面法線信息等。注意不是所有的碰撞對都會(huì)產(chǎn)生碰撞,如上圖1.6-1所示,BroadPhase階段產(chǎn)生了碰撞,但是NarrowPhase階段,卻發(fā)現(xiàn)沒有產(chǎn)生碰撞。
(3) Collision Respones階段: 物理碰撞系統(tǒng)的最后一個(gè)階段就是迭代計(jì)算出碰撞對每個(gè)物理Entity運(yùn)動(dòng)改變的影響。因?yàn)槲锢硪嬷胁辉试S兩個(gè)物理Entity穿透。所以碰撞后就會(huì)改變物理Entity的運(yùn)動(dòng)狀態(tài)。
?
總結(jié)
以上是生活随笔為你收集整理的3D游戏的碰撞检测是如何实现的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python画星空源代码
- 下一篇: div 自定义拉宽_纯Css实现Div高