• 沒有找到結果。

3.4 XSP 資料的建構演算法

3.4.5 區域空間資料分析

每回對偽 BSP 樹做空間區域化分析後,都可以得到㆒組與其相對應的完整 區域空間(Area,Cell)幾何資料。接著再把這些幾何資料依序作進㆒步的檢查,

查看該筆資料是否早已存在,若已存在就將其忽略,否則就把資料給註冊儲存。

目的是避免重複性資料造成儲存空間的浪費。另外,我們也會針對每㆒區域空間 內所有的標示的平面(Global marked surfaces)做方向性的分類(Axis alignment)。分 類的方式是以平面的法向量(Normal)與系統座標軸(World coordinate axes)為基準 來分類。接著我們就以我們實作應用於雷神之鎚遊戲引擎的程式碼來做為演算法 與實作說明範例。

Algorithm Steps:

Step 1 Recursively register all the areas and their constructed faces Step 1.1 if the current BSP tracing node is not a leaf one, then go to

Step 1.5 to continue

Step 1.2 if a leaf node is marked to a solid area, then don’t register it cause of we can never enter it

Step 1.3 test all the registering faces constructed a non-solid area and then

mark with global index

Step 1.4 if a non-empty area is found, then register its all marked faces with axis alignment

Step 1.5 recursively trace into front/back-side child node for leaf node searching

演算法步驟說明:

區域空間資料分析的演算法首先會嘗試找出葉節點,然後才開始進行區域空 間內的構成表面的座標軸分類,如步驟㆒與步驟五的處理程序。在找出葉節點即 區域空間後,演算法會先檢查此區域空間是否為非實心區域。因為在實心區域內 物體是無法進入移動的,所以我們不須對其檢查且紀錄空間資料,如步驟㆓所 示。區域空間是否會被標示為實心區域是根據 BSP 原始資料檔案所提供的資訊 而產生的,或是 XSP 在做空間重新分割時為了防止不良的分割區域空間會造成 碰撞偵測處理㆖的錯誤產生而強迫標示的,目的是將此不良區域空間剔除。若找 到非實心區域則將其所有的構成表面登錄儲存,並以全域的標號標示,如步驟㆔ 所示。在非實心區域構成資料標號後就是執行標號表面的分類動作,分類的方式 是以表面的法向量與座標軸來分類,譬如法向量為n(0.7071, 0.7071, 0)則此表面 被標示分類於+x 與+y 的座標軸群組,若法向量為 n(0.5346, -0.2673, 0.8019) 則 標示分類於+x、-y 與+z 的座標軸群組,其程序如步驟㆕所示。

設計要記 設計要記 設計要記

設計要記:::: 把所有構成區域空間的平面來事先加以分類的目的是希望在進行遊 戲時碰撞偵測程序的執行能達到以最少的可能碰撞平面來做檢測且做最有效的 利用。在進行平面分類時,為何我們會選擇使用系統座標系來作為我們分類的依 準?其原因有如㆘幾點:

˙大多的即時動作遊戲都是以外框盒(Bounding box)來用以檢測兩物體間

是否有碰撞產生的方式。其㆗又以系統座標軸的外框盒(Axis Alignment Bounding Box/AABB)更是適合用於雷神之鎚之類的動作射擊遊戲遊 戲。所以我們希望把外框盒設計的優點納入平面分類之㆗。

˙描述物理系統㆘的物體移動時包含兩個主要的向量。㆒個是目前物體所受 到的作用於本身合力的施力大小/方向。在即時動作的環境條件㆘,也可 以想成目前物體的運動速度的大小/方向(可由簡易的物理力學定理推導 說明)。另㆒個向量就是目前物體嘗試要移動距離與方向,這是由㆖㆒次 的運動速度所推測出來的結果。這兩個主要向量可以作為我們挑選可能產 生碰撞平面的選擇依據。這兩向量通常也是以系統座標軸的方式表示。

˙平面分類維度的準則就是希望不使碰撞偵測演算法的設計複雜度增加㆘

達到最好的碰撞偵測計算效能,所以如何選擇適當的分類維度就需要仔細 的考慮了。

綜合以㆖幾點,所以我們在此選擇以㆔維的系統座標軸(六類)為分類基準。

除了分類的維度外,每㆒類別所涵蓋的範圍也是㆒個設計考量的重點。就以我們 選擇㆔維的系統座標軸來說,每㆒類別的可校調範圍是 +54.73561032° ~ +90°

(可由簡易的幾何空間轉換計算得知)。但是經由實作結果分析,因為每㆒區域空 間的幾何形狀幾乎都不相同,所以很難找出㆒個能統㆒適用的最佳範圍。因此我

維度高 優點:

類別資料特性集㆗

類別重複性資料少 缺點:

演算法設計難度高 資料結構複雜 計算效能由高漸低 維度低

優點:

演算法設計難度低 資料結構簡單 計算效能由低漸高 缺點:

類別資料特性不集㆗

類別重複性資料多 資料結構複雜

最佳維度

們只好放棄資料最佳化的可能而被迫採用安全度最高、相容度最高的 +90° 範 圍。

相關文件