正背面剔除和深度測(cè)試

一产捞、正常渲染會(huì)出現(xiàn)的問(wèn)題

默認(rèn)情況下乞旦,OpenGL 將逆時(shí)針?向環(huán)繞繪制的的三角形定義為正?贼穆,反之為背面。當(dāng)我們需要渲染一個(gè)圖案到屏幕上時(shí)兰粉,圖案中的每個(gè)點(diǎn)故痊、線或三角形都會(huì)在屏幕上進(jìn)行光柵化,并按照?qǐng)D元裝配時(shí)的順序進(jìn)行排列玖姑。

如上圖愕秫,當(dāng)我們繪制一個(gè)由多個(gè)三角形組成的復(fù)雜圖形時(shí),由于每個(gè)三角形都有自己的繪制順序(正背面之分)焰络,所以移動(dòng)圖案時(shí)就會(huì)出現(xiàn)部分背面的三角形會(huì)顯示出來(lái)戴甩,也就是圖中黑色部分。那么如何解決這一問(wèn)題呢:

二闪彼、正背面剔除

油畫算法:繪制遵循嚴(yán)格的先后順序甜孤,先遠(yuǎn)后近,近處的圖案會(huì)把遠(yuǎn)處的不應(yīng)展示的部分進(jìn)行遮蓋以解決這一問(wèn)題畏腕。雖然看似完美但也會(huì)有其他問(wèn)題缴川,當(dāng)我們繪制一個(gè)互相層疊覆蓋的圖案時(shí),由于沒(méi)有嚴(yán)格的先后順序郊尝,計(jì)算機(jī)只能進(jìn)行多次繪制二跋,但是多次繪制自然也會(huì)導(dǎo)致性能的浪費(fèi)

正背面剔除:通過(guò)圖元裝配階段的方向進(jìn)而區(qū)分正背面流昏,背面的直接被拋棄不渲染扎即,自然就可以解決上述問(wèn)題了(省略背面渲染流程還可以起到節(jié)省性能消耗的作用)。

開(kāi)啟背面剔除:glEnable(GL_CULL_FACE);

關(guān)閉背面剔除:glDisable(GL_CULL_FACE);

雖然剔除了不應(yīng)顯示的背面况凉,修復(fù)了黑色的問(wèn)題谚鄙,但如果旋轉(zhuǎn)圖案我們會(huì)發(fā)現(xiàn)如上情況(兩個(gè)正面同時(shí)存在,電腦無(wú)法區(qū)分應(yīng)使用哪個(gè)刁绒,最終導(dǎo)致錯(cuò)拋的情況)闷营。繼續(xù)解決問(wèn)題,請(qǐng)看下文:

三知市、深度測(cè)試

深度:OpenGL坐標(biāo)系中像素點(diǎn)的Z坐標(biāo)距離觀察者的距離傻盟。觀察者可能放在坐標(biāo)系的任何位置,那么嫂丙,就不能簡(jiǎn)單的說(shuō)Z數(shù)值越大或越小娘赴,就是越靠近觀察者。(如果觀察者在Z軸的正方向跟啤,Z值大的靠近觀察者诽表,如果是在Z軸的反方向唉锌,則Z值小的更靠近觀察者。)

深度緩沖區(qū)(DepthBuffer):深度緩沖區(qū)原理就是把一個(gè)距離觀察平面(近裁剪面)的深度值(或距離)與窗口中的每個(gè)像素相關(guān)聯(lián)竿奏。

首先使用glClear(GL_DEPTH_BUFFER_BIT)袄简,把所有像素的深度值設(shè)置為最大值。

啟用了深度緩沖區(qū)泛啸,在繪制每個(gè)像素之前OpenGL都會(huì)把它的深度值和已經(jīng)存儲(chǔ)在這個(gè)像素的深度值進(jìn)行比較绿语。如果新像素深度值<原先像素深度值,則新像素值會(huì)取代原先的像素值候址;反之新像素的顏色值和深度將被丟棄汞舱。這個(gè)比較丟棄的過(guò)程就叫做深度測(cè)試,深度測(cè)試是另一種高效消除隱藏面的技術(shù)宗雇。

申請(qǐng)顏色和深度緩沖區(qū):

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);

啟用深度測(cè)試:glEnable(GL_DEPTH_TEST);

關(guān)閉深度測(cè)試:glDisable(GL_DEPTH_TEST);

注意:如果沒(méi)有深度緩沖區(qū),那么啟動(dòng)深度測(cè)試的命令將被忽略莹规。在繪制場(chǎng)景前赔蒲,清除顏色緩沖區(qū)和深度緩沖區(qū):

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

理想結(jié)果

四、z-fighting(z沖突良漱、閃爍)問(wèn)題

當(dāng)深度值精確度較低舞虱,像素點(diǎn)所處深度距離較接近,界面前后圖案交替顯示的情況母市。

那么如何解決這一問(wèn)題呢:

1矾兜、插入偏移量(第二個(gè)像素點(diǎn)繪制時(shí)深度增加偏移量與之前深度形成較大區(qū)分)

2、使用?glPolygonOffset?函數(shù)調(diào)節(jié)片段的深度值

3患久、硬件層面解決椅寺,采用更高性能設(shè)備以使用更高位的深度緩存區(qū)使精確度得到提高(通常使用的深度緩沖區(qū)是24位的,現(xiàn)在有一些硬件使用32位的緩沖區(qū))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蒋失,一起剝皮案震驚了整個(gè)濱河市返帕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篙挽,老刑警劉巖荆萤,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铣卡,居然都是意外死亡链韭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門煮落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敞峭,“玉大人,你說(shuō)我怎么就攤上這事州邢±茉桑” “怎么了褪子?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)骗村。 經(jīng)常有香客問(wèn)我嫌褪,道長(zhǎng),這世上最難降的妖魔是什么胚股? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任笼痛,我火速辦了婚禮,結(jié)果婚禮上琅拌,老公的妹妹穿的比我還像新娘缨伊。我一直安慰自己,他們只是感情好进宝,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布刻坊。 她就那樣靜靜地躺著,像睡著了一般党晋。 火紅的嫁衣襯著肌膚如雪谭胚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天未玻,我揣著相機(jī)與錄音灾而,去河邊找鬼。 笑死扳剿,一個(gè)胖子當(dāng)著我的面吹牛旁趟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庇绽,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼锡搜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敛劝?” 一聲冷哼從身側(cè)響起余爆,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夸盟,沒(méi)想到半個(gè)月后蛾方,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡上陕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年桩砰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片释簿。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亚隅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庶溶,到底是詐尸還是另有隱情煮纵,我是刑警寧澤懂鸵,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站行疏,受9級(jí)特大地震影響匆光,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜酿联,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一终息、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贞让,春花似錦周崭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至销部,卻和暖如春磨取,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柴墩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凫岖,地道東北人江咳。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哥放,于是被迫代替她去往敵國(guó)和親歼指。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345