OpenGL(七)- 渲染技巧:顏色混合

OpenGL(七)- 渲染技巧:顏色混合

我們都知道顏色緩存區(qū)和深度緩沖區(qū)原理一致奋构,在同一個(gè)位置上只能保存一個(gè)值耿导。那么我們常見的透明圖層相互之間的影響又是為什么呢?

  • 首先通過之前的知識(shí)來接單解讀一下兩個(gè)不透明的圖層相互重疊時(shí)系統(tǒng)做了什么舱呻?


  • 如果其中一塊為50%透明


如果這種情況出現(xiàn)箱吕,我們依舊是進(jìn)行深度測試芥驳,丟棄藍(lán)色部分就不合理了〔绺撸現(xiàn)在要做的就是需要將兩個(gè)顏色進(jìn)行混合才為更為合理,但計(jì)算機(jī)并沒有那么智能需要開發(fā)者來進(jìn)行混合后顏色的計(jì)算怎栽。

當(dāng)然OpenGL也考慮到了這一點(diǎn):

void RenderScene(void){
    //1.清空顏色緩存區(qū)
    glClear(GL_COLOR_BUFFER_BIT)
    //2.開啟混合
    glEnable(GL_BLEND);
    //3.指定組合函數(shù),有系統(tǒng)來計(jì)算混合結(jié)果
    glBlandFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    //4.指定混合方程函數(shù)熏瞄,一般不需要設(shè)置
    glBlendEquation(GL_FUNC_ADD);
    //4.關(guān)閉
    glDisable(GL_BLAND);
}
glBlendEquation(GLenum mode)

一般不需要設(shè)置,系統(tǒng)默認(rèn)使用 GL_FUNC_ADD

glBlandFunc(GLenum sfactor, GLenum dfactor)

其他API相信已經(jīng)見過很多次了强饮,只有glBlandFunc以及參數(shù)需要解釋一下。

API中進(jìn)行計(jì)算時(shí)根據(jù)公式:

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

Cf表示: 計(jì)算后的最終顏色
Cs表示: 源顏色邮丰,也就是渲染命令中后傳入的顏色
S表示: 源混合因子
Cd表示: 目標(biāo)顏色,也就是已經(jīng)保存在顏色混合區(qū)中的顏色剪廉。要注意這個(gè)位置的顏色和圖層的前后并無關(guān)系。之和渲染的先后有關(guān)斗蒋。
D表示: 目標(biāo)混合因子

  • 對應(yīng)上方公式開發(fā)者能操作的其實(shí)只有S捧书、D這兩個(gè)混合因子骤星,下圖是API中兩個(gè)參數(shù)的參數(shù)表。


R洞难、G、B队贱、A表示: 紅、綠柱嫌、藍(lán)、透明度
S编丘、D表示: 源、目標(biāo)
C 代表常量(一般為黑色)

幾種參數(shù)嘗試
//使用默認(rèn)參數(shù)的情況
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//使用其他參數(shù)的情況
glBlendFunc(GL_CONSTANT_ALPHA, GL_CONSTANT_ALPHA);

情況很多就不一一實(shí)驗(yàn)嘉抓,一般使用的默認(rèn)值
glBlandFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

枚舉值套入公式

使用默認(rèn)參數(shù),舉例:
源顏色(CS)為: (1.0f晕窑,0.5f,0.0f, 0.6f)
目標(biāo)顏色(CD)為:(0f抑片,1.0f,0.5f, 1.0f)
S(源因子)為: 0.6f
D(目標(biāo)因子)為: 1-0.6f(源透明度) = 0.4f
結(jié)果 = (源顏色 * 0.6f) + (目標(biāo)顏色 * 0.4f)

  • 通過計(jì)算可知:
  1. 源因子的Alpha越大杨赤,則目標(biāo)顏色保留成分越少
  2. 若果源因子的Alpha為1,則目標(biāo)顏色設(shè)置無效疾牲,也就是被覆蓋。開啟混合后這種情況依舊會(huì)進(jìn)行混合計(jì)算说敏。所以顏色混合一般用在:一個(gè)半透明/不透明的物體前面繪制一個(gè)半透明的物體。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盔沫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子架诞,更是在濱河造成了極大的恐慌,老刑警劉巖谴忧,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件角虫,死亡現(xiàn)場離奇詭異委造,居然都是意外死亡戳鹅,警方通過查閱死者的電腦和手機(jī)昏兆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爬虱,“玉大人,你說我怎么就攤上這事跑筝。” “怎么了曲梗?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稀并。 經(jīng)常有香客問我,道長碘举,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任引颈,我火速辦了婚禮,結(jié)果婚禮上蝙场,老公的妹妹穿的比我還像新娘。我一直安慰自己售滤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布完箩。 她就那樣靜靜地躺著,像睡著了一般弊知。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秩彤,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天事哭,我揣著相機(jī)與錄音,去河邊找鬼鳍咱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛流炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仅胞,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼剑辫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妹蔽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤胳岂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乳丰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产园,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粘勒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庙睡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乘陪,到底是詐尸還是另有隱情,我是刑警寧澤暂刘,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谣拣,受9級(jí)特大地震影響募寨,放射性物質(zhì)發(fā)生泄漏森缠。R本人自食惡果不足惜拔鹰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一贵涵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宾茂,春花似錦瓷马、人聲如沸跨晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焕妙,卻和暖如春蒋伦,著一層夾襖步出監(jiān)牢的瞬間焚鹊,已是汗流浹背痕届。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工寺旺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阻塑。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像陈莽,于是被迫代替她去往敵國和親渤昌。 傳聞我的和親對象是個(gè)殘疾皇子走搁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355