深度緩沖區(qū)帶來的隱患以及預(yù)防方案

深度緩沖區(qū)的概念

  • 深度其實就是該像素點在3D世界中距離攝像機的距離,Z值
  • 深度緩存區(qū),就是一塊內(nèi)存區(qū)域,專門存儲著每個像素點(繪制在屏幕上的)深度值.深度值(Z值)越大,則離攝像機就越遠.
  • 在不使用深度測試的時候,如果我們先繪制一個距離比較近的物體,再繪制距離較遠的物體,則距離遠的位圖因為后繪制,會把距離近的物體覆蓋掉如圖a所示.?有了深度緩沖區(qū)后,繪制物體的順序就不那么重要的.?實際上,只要存在深度緩沖區(qū),OpenGL?都會把像素的深度值寫入到緩沖區(qū)中.?除非調(diào)用glDepthMask(GL_FALSE).來禁止寫入.

圖a

深度測試

深度緩沖區(qū)(DepthBuffer)和顏?色緩存區(qū)(ColorBuffer)是對應(yīng)的.顏色緩存區(qū)存儲像素的顏色信息,而深度緩沖區(qū)存儲像素的深度信息.?在決定是否繪制一個物體表面時, 首先要將表面對應(yīng)的像素的深度值與當前深度緩沖區(qū)中的值進行比較.?如果大于深度緩沖區(qū)中的值,則丟棄這部分.否則 利用這個像素對應(yīng)的深度值和顏?色值.分別更新深度緩沖區(qū)和顏色緩存區(qū).?這個過程稱為”深度測試”。

  • 深度緩沖區(qū),?一般由窗?口管理理系統(tǒng),GLFW創(chuàng)建.深度值?一般由16位,24位,32位值表示.?通常是24位.位數(shù)越高,深度精確度更好.
  • 開啟深度測試:glEnable(GL_DEPTH_TEST);
  • 在繪制場景前,清除顏?色緩存區(qū),深度緩沖glClearColor(0.0f,0.0f,0.0f,1.0f);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  • 清除深度緩沖區(qū)默認值為1.0,表示最大的深度值,深度值的范圍為(0,1)之間.?值越小表示越靠近觀察者,值越大表示 越遠離觀察者

ZFighting閃爍問題

因為開啟深度測試后,OpenGL?就不會再去繪制模型被遮擋的部分.?這樣實現(xiàn)的顯示更加真實.但是由于深度緩沖區(qū)精度的限制對于深度相差非常小的情況下.(例如在同一平面上進行2次繪制),OpenGL?就可能出現(xiàn)不能正確判斷兩者的深度值,會導(dǎo)致深度測試的結(jié)果不可預(yù)測.顯示出來的現(xiàn)象出現(xiàn)交錯閃爍,如圖b所示


圖b

ZFighting閃爍問題問題解決

第一步:?啟用?Polygon Offset 方式解決

? ??????解決?方法:?讓深度值之間產(chǎn)?生間隔.如果2個圖形之間有間隔,是不不是意味著就不不會產(chǎn)?生? ? 干涉.可以理理 解為在執(zhí)?行行深度測試前將?立?方體的深度值做?一些細微的增加.于是就能將??疊的2個圖形深度值之 前有所區(qū)分.

//啟?用Polygon Offset 方式glEnable(GL_POLYGON_OFFSET_FILL)

參數(shù)列列表:?

GL_POLYGON_OFFSET_POINT ? ? ?對應(yīng)光柵化模式: GL_POINT

?GL_POLYGON_OFFSET_LINE ? ? ? ?對應(yīng)光柵化模式: GL_LINE

?GL_POLYGON_OFFSET_FILL ??

第二步:?指定偏移量

  • 通過glPolygonOffset?來指定.glPolygonOffset?需要2個參數(shù): factor , units
  • 每個Fragment?的深度值都會增加如下所示的偏移量量:Offset = ( m * factor ) + ( r * units);m : 多邊形的深度的斜率的最?大值,理理解?一個多邊形越是與近裁剪?面平?行行,m?就越接近于0.r :?能產(chǎn)?生于窗?口坐標系的深度值中可分辨的差異最?小值.r?是由具體是由具體OpenGL?平臺指定的 ?一個常量量.
  • 一個大于0的Offset?會把模型推到離你(攝像機)更遠的位置,相應(yīng)的一個小于0的Offset?會把模型拉近
  • 一般而言,只需要將-1.0?和?-1?這樣簡單賦值給glPolygonOffset?基本可以滿?足需求.
第三步:?關(guān)閉Polygon Offset
????glDisable(GL_POLYGON_OFFSET_FILL)

ZFighting閃爍問題預(yù)防


  • 不要將兩個物體靠的太近奈应,避免渲染時三角形疊在一起。這種方式要求對場景中物體插入一個少量量的偏移贯涎,那么就可能避免ZFighting現(xiàn)象。例如上面的立方體和平面問題中慢洋,將平面下移0.001f就可以解決這個問題塘雳。當然?手動去插?入這個?小的偏移是要付出代價的。
  • ?盡可能將近裁剪面設(shè)置得離觀察者遠一些普筹。上面我們看到粉捻,在近裁剪平面附近,深度的精確度是很?的斑芜,因此盡可能讓近裁剪?面遠一些的話肩刃,會使整個裁剪范圍內(nèi)的精確度變?一些。但是這種?方式會使離觀察者較近的物體被裁減掉,因此需要調(diào)試好裁剪?面參數(shù)盈包。
  • 使?更高位數(shù)的深度緩沖區(qū)沸呐,通常使用的深度緩沖區(qū)是24位的,現(xiàn)在有一些硬件使用32位的緩沖 區(qū)呢燥,使精確度得到提高崭添。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市叛氨,隨后出現(xiàn)的幾起案子呼渣,更是在濱河造成了極大的恐慌,老刑警劉巖寞埠,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁置,死亡現(xiàn)場離奇詭異,居然都是意外死亡仁连,警方通過查閱死者的電腦和手機蓝角,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饭冬,“玉大人使鹅,你說我怎么就攤上這事〔伲” “怎么了患朱?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炊苫。 經(jīng)常有香客問我裁厅,道長,這世上最難降的妖魔是什么劝评? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮倦淀,結(jié)果婚禮上蒋畜,老公的妹妹穿的比我還像新娘。我一直安慰自己撞叽,他們只是感情好姻成,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愿棋,像睡著了一般科展。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糠雨,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天才睹,我揣著相機與錄音,去河邊找鬼。 笑死琅攘,一個胖子當著我的面吹牛垮庐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坞琴,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼哨查,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剧辐?” 一聲冷哼從身側(cè)響起寒亥,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荧关,沒想到半個月后溉奕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡羞酗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年腐宋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檀轨。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡胸竞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出参萄,到底是詐尸還是另有隱情卫枝,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布讹挎,位于F島的核電站校赤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏筒溃。R本人自食惡果不足惜马篮,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怜奖。 院中可真熱鬧浑测,春花似錦、人聲如沸歪玲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滥崩。三九已至岖圈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钙皮,已是汗流浹背蜂科。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工顽决, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崇摄。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓擎值,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逐抑。 傳聞我的和親對象是個殘疾皇子鸠儿,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

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