4.2/5.1:OpenGL 正背面剔除缆瓣、深度測試、Z沖突

正背面剔除

OpenGL的默認(rèn)正背面
  • OpenGL 規(guī)定:

    • 頂點序 逆時針 = 正面
    • 頂點序 順時針 = 背面
  • 圖中立方體虹统,1234面 為逆時針 = 正面弓坞,5678面 為順時針 = 背面隧甚,OpenGL 以此為依據(jù),只需要畫正面渡冻,不需要畫背面戚扳,起到 避免畫錯/節(jié)約性能 (50%左右) 的效果,稱為 正背面剔除族吻。

  • OpenGL 默認(rèn)關(guān)閉正背面剔除帽借,需要手動打開,用完建議恢復(fù)原狀呼奢。

    操作 代碼
    打開正背面剔除 glEnable(GL_CULL_FACE);
    關(guān)閉正背面剔除 (默認(rèn)) glDisable(GL_CULL_FACE);
  • 正背面剔除 在部分情況解決了 該畫哪個面宜雀、不該畫哪個面 的問題。

    開啟正背面剔除前后

深度測試

計算機(jī):橘色在前握础?綠色在前伏钠?
  • 圖中的觀察角度,理應(yīng)只能看到橘色怔匣,看不到綠色换怖;但計算機(jī)不那么聰明,就算我們開啟了 正背面剔除定枷,這兩個面都是正面呀孤澎,計算機(jī)有可能顯示綠色!

  • 例如:下圖已開啟了 正背面剔除欠窒,但后面的畫面遮擋住前面的覆旭。

    未開啟深度測試

  • 深度:物體在規(guī)范化坐標(biāo)系中的 Z值;Z值越大岖妄,則往屏幕里越深越遠(yuǎn)型将。

  • 顏色緩沖區(qū)(ColorBuffer):存儲像素點的顏色信息。

  • 深度緩沖區(qū) (DepthBuffer):存儲像素點的深度值荐虐。

  • 兩個緩沖區(qū) 進(jìn)行協(xié)同工作七兜,在更新一個像素點的顏色信息前,要比較 新數(shù)據(jù)的深度值 和 深度緩沖區(qū)這個點的深度值福扬,如果新數(shù)據(jù)的深度值小腕铸,則說明它會遮擋住原來的,更新顏色信息 且 更新深度值铛碑;否則跳過狠裹。這個過程稱為 深度測試

  • 當(dāng)然汽烦,遮擋物如果是半透明的涛菠,要將新舊顏色進(jìn)行 顏色混合,有機(jī)會再詳細(xì)說。

  • OpenGL 默認(rèn)關(guān)閉深度測試碗暗,需要手動打開颈将,用完建議恢復(fù)原狀。

    操作 代碼
    打開深度測試 glEnable(GL_DEPTH_TEST);
    關(guān)閉深度測試 (默認(rèn)) glDisable(GL_DEPTH_TEST);
  • 由此解決遮擋關(guān)系錯誤的現(xiàn)象言疗。

    開啟深度測試

Z沖突 (Z-Fighting)

  • 深度測試的核心是比較兩個數(shù)據(jù)的 Z值晴圾,在數(shù)學(xué)上看這個方法很完美,但計算機(jī)的數(shù)據(jù)精度不是無窮的:

  • 有2個 Z值噪奄,0.5 和 0.5000000000000000000001死姚,計算機(jī)認(rèn)為他們相等,深度測試失效勤篮,稱為 Z沖突都毒。

  • 以前玩 CS 1.5,把槍扔到地上另一把槍上碰缔,它們會重疊账劲,多個像素點出現(xiàn) Z沖突,計算機(jī)來回顯示 槍1 和 槍2金抡,造成畫面閃爍瀑焦。

  • 解決方案:使重疊的像素點有 微小的、而計算機(jī)又足以識別的 Z值差梗肝,稱為 多邊形偏移榛瓮。使用有2個步驟:

    • OpenGL 默認(rèn)關(guān)閉多邊形偏移,需要手動打開巫击,用完建議恢復(fù)原狀禀晓。

      操作 代碼
      打開多邊形偏移 glEnable(GL_POLYGON_OFFSET_FILL);
      關(guān)閉多邊形偏移 (默認(rèn)) glDisable(GL_POLYGON_OFFSET_FILL);
    • 設(shè)置偏移的factorunits,一般都使用 -1 即可坝锰。

      glPolygonOffset(GLfloat factor, GLfloat units);
      
  • Z沖突 很少在現(xiàn)在的游戲出現(xiàn)粹懒,其解決方案未必是 多邊形偏移,而且可能有不止一種現(xiàn)代的方案什黑,有興趣可進(jìn)一步探索崎淳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堪夭,一起剝皮案震驚了整個濱河市愕把,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌森爽,老刑警劉巖恨豁,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爬迟,居然都是意外死亡橘蜜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來计福,“玉大人跌捆,你說我怎么就攤上這事∠笥保” “怎么了佩厚?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長说订。 經(jīng)常有香客問我抄瓦,道長,這世上最難降的妖魔是什么陶冷? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任钙姊,我火速辦了婚禮,結(jié)果婚禮上埂伦,老公的妹妹穿的比我還像新娘煞额。我一直安慰自己,他們只是感情好沾谜,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布立镶。 她就那樣靜靜地躺著,像睡著了一般类早。 火紅的嫁衣襯著肌膚如雪媚媒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天涩僻,我揣著相機(jī)與錄音缭召,去河邊找鬼。 笑死逆日,一個胖子當(dāng)著我的面吹牛嵌巷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播室抽,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼搪哪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坪圾?” 一聲冷哼從身側(cè)響起晓折,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兽泄,沒想到半個月后漓概,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡病梢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年胃珍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡觅彰,死狀恐怖吩蔑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情填抬,我是刑警寧澤哥纫,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站痴奏,受9級特大地震影響蛀骇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜读拆,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一擅憔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧檐晕,春花似錦暑诸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芥喇,卻和暖如春西采,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背继控。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工械馆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人武通。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓霹崎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親冶忱。 傳聞我的和親對象是個殘疾皇子尾菇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351