深度/模板測試

深度測試

深度緩沖(Depth Buffer)存儲每個(gè)片段的信息,深度緩沖由窗口系統(tǒng)自動創(chuàng)建并將其深度值存儲為 16、 24 或 32 位浮點(diǎn)數(shù)付翁。在大多數(shù)系統(tǒng)中深度緩沖區(qū)為24位筛欢。

GLSL的片段著色器中內(nèi)置gl_FragCoord變量的 x 和 y 表示該片段的屏幕空間坐標(biāo) ,z 表示片段的實(shí)際深度值战秋。此 z 坐標(biāo)值是與深度緩沖區(qū)的內(nèi)容進(jìn)行比較的值璧亚。當(dāng)深度測試啟用的時(shí)候, OpenGL 測試深度緩沖區(qū)內(nèi)的深度值脂信,如果此測試通過癣蟋,深度緩沖內(nèi)的值將被設(shè)為z。如果深度測試失敗狰闪,則丟棄該片段疯搅。

開啟深度測試:glEnable(GL_DEPTH_TEST);

清除深度緩沖區(qū):GL_DEPTH_BUFFER_BIT

禁用深度緩沖區(qū)寫入:glDepthMask(GL_FALSE);

深度測試函數(shù)

glDepthFunc(GL_LESS);

深度測試函數(shù)比較運(yùn)算符

深度值精度

深度值

這里far和near是投影矩陣設(shè)置的可見視圖截錐的遠(yuǎn)近平面值

深度值非線性曲線

z值超過一定值,深度值的變化較谐⒍摺(絕對值較大)秉撇,反映的是觀察者不太會注意遠(yuǎn)離近平面時(shí)物體的細(xì)節(jié)的經(jīng)驗(yàn)。

深度緩沖區(qū)的可視化

將片段的z值作為顏色輸出秋泄,可以反映深度值隨z的變化呈現(xiàn)出的明暗變化琐馆。

距離觀察者越近顏色越暗

深度沖突

兩個(gè)平面或三角形緊密相互平行,深度緩沖區(qū)不具有足夠的精度恒序,無法得知哪一個(gè)靠前瘦麸,導(dǎo)致這兩個(gè)形狀不斷切換順序。這被稱為深度沖突(Z-fighting)歧胁,因?yàn)樗瓷先ハ裥螤顮帄Z靠前的位置滋饲。當(dāng)對象的距離越遠(yuǎn)沖突一般越強(qiáng)(因?yàn)樯疃染彌_區(qū)在z值非常大的時(shí)候沒有很高的精度)。

防止深度沖突

1喊巍,讓物體之間不要離得太近

2屠缭,盡可能把近平面設(shè)置得遠(yuǎn)一些,使得位于近平面附近具有更高的深度值精度

3崭参,大多數(shù)的深度緩沖區(qū)都是24位呵曹,若顯卡支持32位深度值,可提高深度緩沖區(qū)的精度

模板測試

模板測試(Stencil Test)位于片段著色器之后何暮,深度測試之前奄喂,通過設(shè)置模板緩沖(Stencil Buffer)可以保留或丟棄一些片段。

模板緩沖中的模板值(Stencil Value)通常是8位的海洼,因此每個(gè)片段/像素共有256種不同的模板值跨新。

模板緩沖實(shí)例

模板緩沖先清空模板緩沖,設(shè)置所有片段的模板值為0坏逢,然后需要渲染的矩形片段用1填充域帐。場景中的模板值為1的那些片段才會被渲染(其他的都被丟棄)赘被。

1,開啟模板緩沖寫入俯树。glEnable(GL_STENCIL_TEST);

2帘腹,渲染物體,更新模板緩沖许饿。

3,關(guān)閉模板緩沖寫入舵盈。

4陋率,渲染(其他)物體,這次基于模板緩沖內(nèi)容丟棄特定片段秽晚。

每次渲染之前需清空模板緩沖:GL_STENCIL_BUFFER_BIT

設(shè)置模板位掩碼(Bitmask):glStencilMask(value);設(shè)置此值可以屏蔽某些模板緩沖位置的可寫性(模板值與value與運(yùn)算的結(jié)果是最后的模板值)瓦糟。

模板函數(shù)

void glStencilFunc(GLenum func, GLint ref, GLuint mask);

func:設(shè)置模板測試操作。這個(gè)測試操作應(yīng)用到已經(jīng)儲存的模板值和ref值上赴蝇,可用的選項(xiàng)是:GL_NEVER菩浙、GL_LEQUAL、GL_GREATER句伶、GL_GEQUAL劲蜻、GL_EQUAL、GL_NOTEQUAL考余、GL_ALWAYS先嬉。它們的語義和深度緩沖的相似。

ref:指定模板測試的引用值楚堤。模板緩沖的內(nèi)容會與這個(gè)值對比疫蔓。

mask:指定一個(gè)遮罩,在模板測試對比引用值和儲存的模板值前身冬,對它們進(jìn)行按位與(and)操作衅胀,初始設(shè)置為1。

void glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass);

sfail: 如果模板測試失敗將采取的動作酥筝。

dpfail: 如果模板測試通過滚躯,但是深度測試失敗時(shí)采取的動作。

dppass: 如果深度測試和模板測試都通過樱哼,將采取的動作哀九。

測試選項(xiàng)

默認(rèn)值都是GL_KEEP,即不會更新模板緩沖搅幅。

物體輪廓

物體輪廓(Object Outining)它能夠給每個(gè)(或一個(gè))物體創(chuàng)建一個(gè)有顏色的邊阅束。在策略游戲中當(dāng)你打算選擇一個(gè)單位的時(shí)候它特別有用。給物體加上輪廓的步驟如下:

1茄唐,在繪制物體前息裸,把模板測試方程設(shè)置為GL_ALWAYS蝇更,用1更新物體將被渲染的片段。

2呼盆,渲染物體年扩,寫入模板緩沖。

3访圃,關(guān)閉模板寫入和深度測試厨幻。

4,每個(gè)物體放大一點(diǎn)點(diǎn)腿时。

5况脆,使用一個(gè)不同的片段著色器用來輸出一個(gè)純顏色。

6批糟,再次繪制物體格了,但只是當(dāng)它們的片段的模板值不為1時(shí)才進(jìn)行。

7徽鼎,開啟模板寫入和深度測試盛末。

輪廓效果

圖片和一些文字來源于https://learnopengl-cn.github.io,本人收集作為筆記否淤,如有侵權(quán)悄但,望告知


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叹括,隨后出現(xiàn)的幾起案子算墨,更是在濱河造成了極大的恐慌,老刑警劉巖汁雷,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件净嘀,死亡現(xiàn)場離奇詭異,居然都是意外死亡侠讯,警方通過查閱死者的電腦和手機(jī)挖藏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厢漩,“玉大人膜眠,你說我怎么就攤上這事×锸龋” “怎么了宵膨?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炸宵。 經(jīng)常有香客問我辟躏,道長,這世上最難降的妖魔是什么土全? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任捎琐,我火速辦了婚禮会涎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瑞凑。我一直安慰自己末秃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布籽御。 她就那樣靜靜地躺著练慕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪技掏。 梳的紋絲不亂的頭發(fā)上贺待,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音零截,去河邊找鬼。 笑死秃臣,一個(gè)胖子當(dāng)著我的面吹牛涧衙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奥此,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼弧哎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了稚虎?” 一聲冷哼從身側(cè)響起撤嫩,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蠢终,沒想到半個(gè)月后序攘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寻拂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年程奠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祭钉。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞄沙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慌核,到底是詐尸還是另有隱情距境,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布垮卓,位于F島的核電站垫桂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扒接。R本人自食惡果不足惜伪货,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一们衙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碱呼,春花似錦蒙挑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姑裂,卻和暖如春馋袜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舶斧。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工欣鳖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茴厉。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓泽台,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矾缓。 傳聞我的和親對象是個(gè)殘疾皇子怀酷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容