10 深度測試

2021-09-07 23:18:19 字數 973 閱讀 6683

使用諸如direct3d這樣的渲染api在螢幕上渲染圖形時,就會碰到所謂的「透支」(指的是渲染全景造成的記憶體浪費)問題。當在螢幕上繪製交迭(重爹)的兩個或多個圖元時,就會出現透支。這些圖元有不同的位置,但在螢幕上渲染時,它們交迭在一起。因為direct3d不知道要繪製的圖元的先後順序,所以會出現透支問題。direct3d不僅不知道是哪個圖元遮住了哪個圖元,而且還不知道是哪個圖元部分遮住了其他物體。

解決透支問題的乙個辦法是使用一種名為「深度快取或z快取」的快取。深度快取是乙個後台快取,它類似於opengl和direct3d這樣的api渲染,儲存場景深度資訊。當繪製圖元時,將物體的深度資訊和深度快取中的內容加以比較,對構成圖元的每個畫素都加以比較。如果物體靠近攝象機,就更新深度快取和顏色快取等內容。如果物體距離觀察人員的位置要比已經渲染在螢幕上的內容遠,那麼就拋棄那些不可見的畫素。

圖形硬體並不總包含深度快取,所以像二叉空間分割(bsp:binary space partitioning)樹這樣的內容對於開發3d遊戲就非常重要。現在並不需要使用bsp樹渲染場景。因為圖形硬體的執行速度十分快,因為深度快取成為最佳選擇,所以像過去那樣使用bsp樹只會降低速度。深度快取執行在gpu硬體上,而不是cpu上。為了在direct3d中啟動深度快取,可以設定如程式清單1.26所示的渲染狀態。

g_d3ddevice->setrenderstate(d3drs_zenable, true);

無疑,使用深度快取會比什麼都不使用要慢的多。但是,如果想要使用硬體正確的渲染場景。那麼就要使用深度快取。因為深度快取的速度成本十分小,所以沒必要在開發的程式中都使用深度快取。通過簡單的一行**就可以在direct3d中使用深度快取。本書稍後將介紹bsp樹的建立和使用,以及用它來儲存場景資訊。使用bsp樹只是為了起到指導作用,在最終的遊戲中使用的並不是它。當前,bsp樹對碰撞檢測非常有用,但對渲染卻並非如此。如果想在渲染時使用這些bsp樹,那麼就要使用其他技術加快計算,直到只使用bsp樹可以從中受益為止。本書稍將詳細介紹這方面的內容。

openGL 深度測試

opengl裡常出現深度測試,一直不清楚。今天就來弄清楚。1 什麼是深度?深度其實就是該象素點在3d世界中距離攝象機的距離 繪製座標 深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度值 z值 越大,則離攝像機越遠。深度值是存貯在深度快取裡面的,我們用深度快取的位數來衡量深度快取的精度。深度...

openGL 深度測試

opengl裡常出現深度測試,一直不清楚。今天就來弄清楚。1 什麼是深度?深度其實就是該象素點在3d世界中距離攝象機的距離 繪製座標 深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度值 z值 越大,則離攝像機越遠。深度值是存貯在深度快取裡面的,我們用深度快取的位數來衡量深度快取的精度。深度...

openGL 深度測試

opengl裡常出現深度測試,一直不清楚。今天就來弄清楚。1 什麼是深度?深度其實就是該象素點在3d世界中距離攝象機的距離 繪製座標 深度快取中儲存著每個象素點 繪製在螢幕上的 的深度值!深度值 z值 越大,則離攝像機越遠。深度值是存貯在深度快取裡面的,我們用深度快取的位數來衡量深度快取的精度。深度...