5-3.顏色混合

混合

當(dāng)開啟深度測試后,兩個(gè)重疊的圖層中,如果有一個(gè)圖層是半透明的,另一個(gè)是非半透明,此時(shí)就不能通過深度值比較,來進(jìn)行顏色值的覆蓋,而是需要將兩個(gè)顏色進(jìn)行混合,然后存入顏色緩沖區(qū)。
顏色混合的使用方式
1.用于單純的將兩個(gè)圖層重疊時(shí)進(jìn)行顏色混合,這種混合并不能解決顏色的混合。在固定著色器和可編程著色器都可以使用這種方式

//開啟,
glEnable(GL_BlEND);
//關(guān)閉
glDisable(GL_BlEND);

2.用于處理類似濾鏡效果的場景,簡單描述就是將需要處理的圖片顏色和圖片上覆蓋的半透明顏色進(jìn)行混合 即 兩股顏色混合,此時(shí)如果只是單純的開關(guān)方式,已經(jīng)不能滿足我們的需求,需要借助混合方程式,來實(shí)現(xiàn)兩股顏色的混合。一般是在可編程著色器中片元著色器中使用。

//開啟,
glEnable(GL_BlEND);
//設(shè)置混合因子--默認(rèn)值是 GL_SRC_ALPHA 和 GL_ONE_MINUS_SRC_ALPHA
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
//關(guān)閉
glDisable(GL_BlEND);
混合步驟.png
  • 設(shè)置混合因子--默認(rèn)值是 GL_SRC_ALPHA 和GL_ONE_MINUS_SRC_ALPHA
  • glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  • 混合因子計(jì)算方程式 :
//Cf -- 最終組合的顏色值
//Cd:源顏色 -- 當(dāng)前渲染命令傳入的顏色值
//CS:目標(biāo)顏色 -- 顏色緩沖區(qū)中已經(jīng)存在的顏色值
//S:源混合因子
//D:目標(biāo)混合因子 
Cf = (Cs * S) + (Cd * D)
混合因子參數(shù).png

表中R、G、B、A 分別代表 紅、綠、藍(lán)、alpha。
表中下標(biāo)S、D,分別代表源、?標(biāo)
表中C 代表常量顏?(默認(rèn)??)

可用的混合方程模式.png

通過glbBlendEquation(GLenum mode)修改顏色的混合方程式

通過一個(gè)常見的混合函數(shù)組合來說明問題:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

通過上面的調(diào)用來告訴OpenGL我們使用的混合因子。
假設(shè)現(xiàn)在渲染命令傳進(jìn)來的源RGBA顏色值是(1.0f,0.0f,1.0f,1.0f)。而在顏色緩沖區(qū)相同的位置已經(jīng)有目標(biāo)顏色RGBA值是(0.0f, 1.0f, 0.0f, 1.0f)。

代入公式:Ci = (Cs * S) + (Cd * D)
Cs(目標(biāo)顏色)=(1.0f,0.0f,1.0f,0.6f), GL_SRC_ALPHA參數(shù)說明源混合因子取源顏色的alpha值,所以S = 0.6f。
Cd(源顏色)=(0.0f, 1.0f, 0.0f, 1.0f). GL_ONE_MINUS_SRC_ALPHA說明了目標(biāo)混合因子取1-As,D = 1-0.6 = 0.4f;
所以代入計(jì)算得:
(Cs * S) = (0.6f, 0.0f, 0.6f, 0.36f)
(Cd * D) = (0.0f, 0.4f, 0.0f, 0.4f)
Ci = (Cs * S) + (Cd * D) = (0.6f, 0.4f, 0.6f, 0.76f)
得到的顏色是近似于洋紫色。

最終顏色是以目標(biāo)顏?與源顏色進(jìn)行組合。源顏色的alpha值越高,添加的源顏色成分越高,目標(biāo)顏?所保留的成分就會越少。 混合函數(shù)經(jīng)常用于實(shí)現(xiàn)在其他?些不透明的物體前?繪制一個(gè)透明物體的效果。

混合總結(jié)點(diǎn):

  • 在顏色緩沖區(qū)中,每個(gè)像素點(diǎn)只能存儲一種顏色
  • 顏色混合主要用于實(shí)現(xiàn)在不透明物體前繪制透明物體的效果
  • 只有上面圖層是透明時(shí),才需要開啟顏色混合,如果不是,則沒有必要開啟顏色混合
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容