官术网_书友最值得收藏!

1.3 利用柵格數據預計算SDF

SDF記錄的是點到障礙物的距離,核心思想即空間換時間;如果動態計算點x的有號距離φ(x),那么復雜度跟物理碰撞檢測的方案沒什么區別。因此,我們需要預計算得到整張地圖的SDF數據,因為不可能存儲地圖上所有的點,需要根據障礙精度對地圖進行柵格化,比如主流MOBA游戲的5v5地圖可以使用256×256的柵格。

首先介紹一種基于柵格的SDF預計算方法。

根據場景障礙生成如圖1.2所示的柵格地圖,灰色表示阻擋,白色表示可行走區域。使用Meijster算法[1]計算柵格中任意格子到柵格阻擋區中最近格子的距離:

圖1.2 柵格地圖

從而得到一張柵格地圖的SDF數據,如圖1.3所示。

圖1.3 SDF顏色越深,φ值越小

如果使用2字節表示每個格子的SDF,256×256柵格地圖的內存大小為256×256×2=128(KB)。在得到柵格地圖的SDF數據后,如何檢測角色(圖1.3中的圓)與障礙物發生了碰撞呢?發生碰撞后角色又該如何移動呢?

主站蜘蛛池模板: 蓬溪县| 德安县| 德庆县| 桓台县| 余干县| 静海县| 印江| 称多县| 都安| 浮山县| 高雄县| 大丰市| 新安县| 丰镇市| 都江堰市| 通渭县| 同仁县| 普宁市| 铜山县| 云阳县| 南溪县| 定南县| 中卫市| 自贡市| 嵊州市| 西乡县| 许昌市| 宝丰县| 息烽县| 塔城市| 柳州市| 泗水县| 锡林浩特市| 德化县| 白银市| 大埔县| 盘锦市| 宾阳县| 云阳县| 金塔县| 明溪县|