OpenGL三-深度測(cè)試

一蜈抓、在渲染過(guò)程可能產(chǎn)生的問(wèn)題

二、解決方法

1昂儒、油畫法
2沟使、正面、背面剔除
3渊跋、深度測(cè)試

1腊嗡、油畫法

2、正面拾酝、背面剔除

可以如下調(diào)用開啟或關(guān)閉表面剔除燕少。

glEnable(GL_CULL_FACE);
glDisable(GL_CULL_FACE);

該函數(shù)的原型如下:

void glFrontFace(GLenum mode);
mode 參數(shù)的可選的值有 GL_CW 和 GL_CCW(默認(rèn) 值是 GL_CCW)。
GL_CW 表示頂點(diǎn)的排列順序是順時(shí)針的面是正面蒿囤。
GL_CCW 表示頂點(diǎn)的排列順序是逆時(shí)針的面是正面(默 認(rèn)值)客们。
void glCullFace()
GL_FRONT            //正面剔除
GL_BACK            //背面剔除
GL_FRONT_AND_BACK  //正面和反面都要剔除

3、深度測(cè)試

該函數(shù)的原型如下:

void glutInitDisplayMode(GLUT_DEPTH);

開啟深度測(cè)試

glEnable(GL_DEPTH_TEST);

三材诽、使用正面底挫、背面剔除 以及 深度測(cè)試來(lái)解決 渲染過(guò)程中產(chǎn)生的 問(wèn)題

Demo:05-背面剔除

四、多邊形模型

使用glPolygonMode(Glenum face,Glenum mode) 函數(shù)來(lái)指定填充方式
Face參數(shù):GL_FRONT脸侥、GL_BACK建邓、GL_FRONT_AND_BACK
Mode參數(shù):GL_FILL(默認(rèn)實(shí)心填充) 、GL_LINE睁枕、GL_POINT

五官边、多邊形偏移

深度測(cè)試實(shí)現(xiàn)深度的過(guò)程中,可能產(chǎn)生的2種問(wèn)題:
1譬重、z-fighting(z沖突)
2、圖形重疊(無(wú)法體現(xiàn)深度)

六罐氨、解決方法

1臀规、調(diào)整Z值
2、使用glPolygonOffset函數(shù)栅隐,調(diào)節(jié)片段深度值塔嬉。

6.1 glPolygonOffset 函數(shù)

void glPolygonOffset(Glfloat factor,Glfloat units);

應(yīng)用到片段上總偏移計(jì)算方程式:

Depth Offset = (DZ * factor) + (r * units);
DZ:深度值(Z值) r:使得深度緩沖區(qū)產(chǎn)生變化的最小值
負(fù)值,將使得z值距離我們更近租悄,而正值谨究,將使得z值距離我們更遠(yuǎn), 對(duì)于上節(jié)課的案例泣棋,我們?cè)O(shè)置factor和units設(shè)置為-1胶哲,0

Demo:07-深度測(cè)試產(chǎn)生的問(wèn)題

七、裁剪

在OpenGL 提高渲染的一種方式潭辈,只刷新屏幕上發(fā)生變化的部分鸯屿。OpenGL 允許我們將 要進(jìn)行渲染的窗口只去指定一個(gè)裁剪框澈吨。

//1 開啟裁剪測(cè)試
glEnable(GL_SCISSOR_TEST);

//2.關(guān)閉裁剪測(cè)試
glDisable(GL_SCISSOR_TEST);

//3.指定裁剪窗口
void glScissor(Glint x,Glint y,GLSize width,GLSize height);
x,y:指定裁剪框左下角位置;
width,height:指定裁剪尺寸

八、實(shí)現(xiàn)多層裁剪

Demo:08-OpenGL裁剪

九寄摆、混合

我們把OpenGL 渲染時(shí)會(huì)把顏色值存在顏色緩存區(qū)中谅辣,每個(gè)片段的深度值也是放在深 度緩沖區(qū)。當(dāng)深度緩沖區(qū)被關(guān)閉時(shí)婶恼,新的顏色將簡(jiǎn)單的覆蓋原來(lái)顏色緩存區(qū)存在的顏 色值桑阶,當(dāng)深度緩沖區(qū)再次打開時(shí),新的顏色片段只是當(dāng)它們比原來(lái)的值更接近鄰近的 裁剪平面才會(huì)替換原來(lái)的顏色片段勾邦。

glEnable(GL_BlEND);

9.1 組合顏色

目標(biāo)顏色:已經(jīng)存儲(chǔ)在顏色緩存區(qū)的顏色值
源顏色:作為當(dāng)前渲染命令結(jié)果進(jìn)入顏色緩存區(qū)的顏色值 當(dāng)混合功能被啟動(dòng)時(shí)蚣录,源顏色和目標(biāo)顏色的組合方式是混合方程式控制的。在默認(rèn)情況下检痰,混合方程式如下所示:

Cf = (Cs * S) + (Cd * D)

Cf :最終計(jì)算參數(shù)的顏色

Cs : 源顏色

Cd :目標(biāo)顏色

S:源混合因子

D:目標(biāo)混合因子

9.2 設(shè)置混合因子

設(shè)置混合因子包归,需要用到glBlendFun函數(shù)

glBlendFunc(GLenum S,GLenum D);

S:源混合因子

D:目標(biāo)混合因子

9.3 混合因子枚舉列表

表中R、G铅歼、B公壤、A 分別代表 紅、綠椎椰、藍(lán)厦幅、alpha。

表中下標(biāo)S慨飘、D确憨,分別代表源、 目標(biāo)

表中C 代表常量顏色(默認(rèn)黑 色)

9.4 練習(xí)

下面通過(guò)一個(gè)常見的混合函數(shù)組合來(lái)說(shuō)明問(wèn)題:

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

如果顏色緩存區(qū)已經(jīng)有一種顏色紅色(1.0f,0.0f,0.0f,0.0f),這個(gè)目標(biāo)顏色Cd瓤的,如果在這 上面用一種alpha為0.6的藍(lán)色(0.0f,0.0f,1.0f,0.6f)

Cd (目標(biāo)顏色) = (1.0f,0.0f,0.0f,0.0f);

Cs (源顏色) = (0.0f,0.0f,1.0f,0.6f);

S = 源alpha值 = 0.6f;

D = 1 - 源alpha值= 1-0.6f = 0.4f;

方程式Cf = (Cs * S) + (Cd * D)

等價(jià)于 = (Blue * 0.6f) + (Red * 0.4f)

9.4 總結(jié)

最終顏色是以原先的紅色(目標(biāo)顏色)與 后來(lái)的藍(lán)色(源顏色)進(jìn)行組合休弃。源顏色的 alpha值越高,添加的藍(lán)色顏色成分越高圈膏,目標(biāo)顏色所保留的成分就會(huì)越少塔猾。

混合函數(shù)經(jīng)常用于實(shí)現(xiàn)在其他一些不透明的物體前面繪制一個(gè)透明物體的效果。

Demo:09-混合方式

十稽坤、改變組合方程式

默認(rèn)混合方程式:

Cf = (Cs*S)+(Cd*D)

實(shí)際上遠(yuǎn)不止這一種混合方程式丈甸,我們可以從5個(gè)不同的方程式中進(jìn)行選擇

10.1 改變混合方程式的函數(shù) glBlendEquation()

選擇混合方程式的函數(shù):

glbBlendEquation(GLenum mode);

10.2 glBlendFuncSeparate 函數(shù)

除了能使用glBlendFunc 來(lái)設(shè)置混合因子,還可以有更靈活的選擇尿褪。

void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB,GLenum strAlpha,GLenum dstAlpha);
strRGB: 源顏色的混合因子
dstRGB: 目標(biāo)顏色的混合因子
strAlpha: 源顏色的Alpha因子
dstAlpah: 目標(biāo)顏色的Alpha因子

10.3 glBlendFuncSeparate 注意

glBlendFunc 指定 源和目標(biāo) RGBA值的混合函數(shù);但是glBlendFuncSeparate函 數(shù)則允許為RGB 和 Alpha 成分單獨(dú)指定混合函數(shù)睦擂。

在混合因子表中, GL_CONSTANT_COLOR,GL_ONE_MINUS_CONSTANT_COLOR,GL_CONSTANT_ALPHA,GL_ONE_MINUS_CONSTANT值允許混合方程式中引入一個(gè)常量混合顏色杖玲。

10.4 常量混合顏色

常量混合顏色顿仇,默認(rèn)初始化為黑色(0.0f,0.0f,0.0f,0.0f),但是還是可以修改這個(gè)常量 混合顏色。

void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclampf alpha );
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夺欲,一起剝皮案震驚了整個(gè)濱河市跪帝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌些阅,老刑警劉巖伞剑,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異市埋,居然都是意外死亡黎泣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門缤谎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抒倚,“玉大人,你說(shuō)我怎么就攤上這事坷澡⊥信唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵频敛,是天一觀的道長(zhǎng)项郊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)斟赚,這世上最難降的妖魔是什么着降? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拗军,結(jié)果婚禮上任洞,老公的妹妹穿的比我還像新娘。我一直安慰自己发侵,他們只是感情好交掏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刃鳄,像睡著了一般盅弛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上铲汪,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天熊尉,我揣著相機(jī)與錄音罐柳,去河邊找鬼掌腰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛张吉,可吹牛的內(nèi)容都是我干的齿梁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼勺择!你這毒婦竟也來(lái)了创南?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤省核,失蹤者是張志新(化名)和其女友劉穎稿辙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體气忠,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邻储,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旧噪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吨娜。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淘钟,靈堂內(nèi)的尸體忽然破棺而出宦赠,到底是詐尸還是另有隱情,我是刑警寧澤米母,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布勾扭,位于F島的核電站,受9級(jí)特大地震影響爱咬,放射性物質(zhì)發(fā)生泄漏尺借。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一精拟、第九天 我趴在偏房一處隱蔽的房頂上張望燎斩。 院中可真熱鬧,春花似錦蜂绎、人聲如沸栅表。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)怪瓶。三九已至,卻和暖如春践美,著一層夾襖步出監(jiān)牢的瞬間洗贰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工陨倡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敛滋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓兴革,卻偏偏與公主長(zhǎng)得像绎晃,于是被迫代替她去往敵國(guó)和親蜜唾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354