空間劃分及可見性演算法 三

2021-05-21 15:34:45 字數 853 閱讀 2114

前面討論的bsp和portal大多數情況會被用於室內場景的管理,更確切的說是在充滿分割面的場景中。在室外場景管理中一般會用到bhv(包圍體層次結構)或八叉樹(num_division = 2的一種特殊的bhv)。

關於如何建立bhv及如何遍歷bhv樹利用視椎體進行剔除就不在贅述了。但需要認識到以下幾點:

<1>bhv樹也是需要離線建立的。

<2>層數的限制很自由,至少有以下選擇:

(1)在節點的大小達到特定值時;

(2)在達到特定層數時;

(3)在每個節點包含的多邊形的數目達到特定值時;

<3>8叉樹比較常用,是因為它能很好的模擬3d座標系有8個象限組成的特性。

最後,讓我們來**一下oc(遮掩剔除):

在實際應用中,有時候不想使用有關可見性的靜態解決方案,因為遊戲世界可能頻繁變換,pvs、bsp、bhv都不適合。

可喜的是,我們發現在遊戲中經常會有一些很大的物體,它們會遮掩大部分場景,這就為oc提供了可能性。

oc技術的步驟如下:

<1>遍歷完全位於視椎體內的且可見的所有的物體,選擇n個最近、最大的物體。

<2>將物體投影到螢幕空間,並計算投影區域的面積。從中選擇m個投影面積較大的物體,然後計算每個遮掩物的內接矩形。

<3>將遮掩矩形加入到遮掩體中,然後根據遮掩體對所有多邊形和物體進行檢測,剔除所有被遮掩的物體。

下面是使用oc需要注意的幾點:

<1>可以離線選擇一部分遮掩物,在執行階段根據潛在的遮掩物進行選擇,速度會很快。

<2>一般結合bsp、portal、8叉樹等場景管理,才能使效率很高。

到此為止,關於空間劃分和可見性演算法基本介紹完畢。後面會結合具體引擎,關於該專題進行深入分析,並對以前留下的問題進行闡述。

空間劃分及可見性演算法

最簡單的流水線可見性處理如下 對每個物體轉換到世界座標,然後進行視椎體剔除,其次是背面消隱,最總通過空間剪裁和光柵化期間的影象空間裁剪得到最終的要繪製的影象。在場景很簡單,物體很少的情況,上述方法是可行的。但考慮到現代遊戲的場景複雜程度,如果還採用上面的流水線來提出多邊形,就顯得力不從心了,因為這意...

C 中 作用域及可見性

作用域是用來表示某個識別符號在什麼範圍內有效,可見性是指識別符號是否可見,可引用。1.作用域 作用域是這樣乙個區域,識別符號在程式的這個區域內是有效的。c 的作用域主要有四種 函式原型作用域 塊作用域 類作用域和檔案作用域。a.函式原型作用域 函式原型大家還記得嗎?比如 void fun int x...

PL SQL變數作用範圍及可見性

在pl sql程式設計中,如果在變數的定義上沒有做到統一的話,可能會隱藏一些危險的錯誤,這樣的原因主要是變數的作用範圍所致。與其它高階語言類似,pl sql的變數作用範圍特點是 變數的作用範圍是在你所引用的程式單元 塊 子程式 包 內。即從宣告變數開始到該塊的結束。乙個變數 標識 只能在你所引用的塊...