二叉空間分割碰撞

2021-04-29 06:18:08 字數 957 閱讀 3631

bsp(二叉空間分割binary space partitioning)樹是另一種型別的空間分割技術,其已經在遊戲工業上應用了許多年(doom是第乙個使用bsp樹的商業遊戲)。儘管在今天bsp樹已經沒像過去那麼受歡迎了,但現在仍在廣泛地採用這項技術。當你看一下bsp在碰撞檢測方面那極度乾淨漂亮和高速的效率,立刻能讓你眼前一亮。不但bsp樹在多邊形剪下方面表現出色,而且還能讓我們有效地自由運用world-object式的碰撞檢測。bsp樹的遍歷是使用bsp的乙個基本技術。碰撞檢測本質上減少了樹的遍歷或搜尋。這種方法很有用因為它能在早期排除大量的多邊形,所以在最後我們僅僅是對少數面進行碰撞檢測。正如我前面所說的,用找出兩個物體間的分隔面的方法適合於判斷兩個物體是否相交。如果分隔面存在,就沒有發生碰撞。因此我們遞迴地遍歷world樹並判斷分割面是否和包圍球或包圍盒相交。我們還可以通過檢測每乙個物體的多邊形來提高精確度。進行這種檢測最簡單的乙個方法是測試看看物體的所有部分是否都在分割面的一側。這種運算真的很簡單,我們用迪卡爾平面等式 ax + by + cz + d = 0 去判斷點位於平面的哪一側。如果滿足等式,點在平面上;如果ax + by + cz + d > 0那麼點在平面的正面;如果ax + by + cz + d < 0點在平面的背面。

在碰撞沒發生的時候有乙個重要的事情需要注意,就是乙個物體(或它的包圍盒)必須在分割面的正面或背面。如果在平面的正面和背面都有頂點,說明物體與這個平面相交了。

不幸的是,我們還沒有乙個很好的方法檢測在乙個時間間隔內的碰撞。然而,我已經看到有另外的資料結構像bsp樹一樣開始廣泛使用了。

為了更清楚的描述bsp檔案格式,在這篇文章中將試圖對q2渲染引擎進行技術方面的描述。現在讓我們假想這個渲染器使用的是基本的3d圖形技術,包含bsp樹結構。

我們在這篇文章中描述的是q2的bsp檔案格式,這個檔案格式由kingpin使用(他建立了q2引擎)。對於q1和q3的檔案格式,雖然他們很相同,但還是有點不相容。不管怎樣,bsp的檔案結構和技術不是很難,這篇文章將對於那些對這些格式趕興趣的人。"

二元空間分割樹 BSP (二)

來自於 在渲染3d遊戲的室內場景時,bsp樹是往往是乙個比較複雜但非常有效的方法。它可以用來進行高效的深度檢測。深度檢測通常 用來決定哪個物體離視點更遠,然後再根據從遠到近進行多邊形繪製,這樣出來的結果才是正確的。首先給出乙個圖,我們可以看出在removal b區域,白色的多邊形覆蓋了黃色多邊形,而...

二叉排序樹 二叉搜尋樹 二叉查詢樹

特點 結構體定義struct node 建樹 建二叉排序樹 void create node root,int t else if t root data create root lc,t else create root rc,t 前序遍歷 層序 字典序 int flag int pre 1001...

二叉搜尋樹(二叉排列樹或二叉查詢樹)

1 二叉排序樹性質 1 就是若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 2 若它的右子樹不空,則右子樹上所有節點的值均大於其根節點的值。3 換句話說就是 任何節點的鍵值一定大於其左子樹中的每乙個節點的鍵值,並小於其右子樹中的每乙個節點的鍵值。2 二叉排序樹查詢 要在二叉樹中找出查詢...