OpenGL 混合

緣由

顏色緩衝區存儲着像素點的顏色信息,當深度緩衝區開啓時,當該像素點深度小於原來的深度時的顏色信息就會被替換爲新的顏色信息。當咱們的顏色攜帶透明度信息時,就須要用到混合。數組

混合顏色

目標顏色 已經存儲在顏色緩存區的顏色值 源顏色 做爲當前渲染命令結果進入顏色緩存區的顏色值 當混合功能被啓動時,源顏色和⽬標顏色的組合方式是混合方程式控制的。在默認狀況下,混合⽅方程式以下所示: Cf = (Cs * S) + (Cd * D) Cf :最終計算參數的顏色 Cs : 源顏色 Cd :目標顏色 S:源混合因子 D:⽬標混合因子緩存

使用

開啓混合 glEnable(GL_BlEND) bash

image.png

設置混合因子 glBlendFunc(GLenum S,GLenum D) S:源混合因⼦子 D:⽬目標混合因⼦子 混合因子以下圖: 函數

顏色混合

模擬案例

下⾯經過一個常見的混合函數組合來講明問題: glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 若是顏⾊緩存區已經有一種顏色紅色(1.0f,0.0f,0.0f,0.0f),這個目標顏色Cd,若是在這上面用⼀種alpha爲0.6的藍⾊色(0.0f,0.0f,1.0f,0.6f) Cd (⽬目標顏⾊色) = (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) 等價於 = (Blue * 0.6f) + (Red * 0.4f)spa

更改組合方式

選擇混合⽅程式的函數: glbBlendEquation(GLenum mode) 3d

混合方程式模式

glBlendFuncSeparate函數

除了能使用glBlendFunc 來設置混合因子,還能夠有更靈活的選擇code

void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB ,GLenum strAlpha,GLenum dstAlpha);
strRGB: 源顏色的混合因子
dstRGB: ⽬標顏色的混合因子 
strAlpha: 源顏色的Alpha因子 
dstAlpha: ⽬標顏色的Alpha因子

複製代碼

glBlendFunc指定源和⽬標 RGBA值的混合函數; glBlendFuncSeparate函數則容許爲RGBAlpha 成分單獨指定混合函數 GL_CONSTANT_COLOR、GL_ONE_MINUS_CONSTANT_COLOR、GL_CONSTANT_ALPHA、GL_ONE_MINUS_CONSTANT值容許混合方程式中引入一個常量混合顏色。 常量混合顏色,默認初始化爲⿊色(0.0f,0.0f,0.0f,0.0f) 修改常量混合顏色 void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclampf alpha )cdn

相關文章
相關標籤/搜索