OpenGL 記錄 關於「混合」渲染

2021-07-23 17:05:14 字數 1676 閱讀 3124

顧名思義,為了渲染出不同透明度的級別,我們需要開啟混合。

step1: 需要啟用混合(blending),通過gl_blend

glenable(gl_blend);
step2:告知opengl 如何進行blending
void glblendfunc(glenum sfactor, glenum dfactor);
詳細分析:以下為計算混合的方程式 c¯

我們有兩個方塊,我們希望在紅色方塊上繪製綠色方塊。紅色方塊會成為目標顏色(它會先進入顏色緩衝),我們將在紅色方塊上繪製綠色方塊。

那麼問題來了:我們怎樣來設定因子呢?我們起碼要把綠色方塊乘以它的alpha值,所以我們打算把fs

rc設定為源顏色向量的alpha值:0.6。接著,讓目標方塊的濃度等於剩下的alpha值。如果最終的顏色中綠色方塊的濃度為60%,我們就把紅色的濃度設為40%(1.0 – 0.6)。所以我們把fd

esti

nati

on設定為1減去源顏色向量的alpha值。方程將變成: c¯

resu

lt=⎛

⎝⎜⎜⎜

0.01.0

0.00.6⎞⎠

⎟⎟⎟∗

0.6+⎛⎝

⎜⎜⎜1.0

0.00.0

1.0⎞⎠⎟

⎟⎟∗(

1−0.6)

最終方塊結合部分包含了60%的綠色和40%的紅色,得到一種髒兮兮的顏色:

最後的顏色被儲存到顏色緩衝中,取代先前的顏色。

step3:選擇合適的選項因子 為函式 glblendfunc(glenum sfactor, glenum dfactor)

也可以為rgb和alpha通道各自設定不同的選項,使用glblendfuncseperate:

glblendfuncseperate(gl_src_alpha, gl_one_minus_src_alpha,gl_one, gl_zero);
這個方程就像我們之前設定的那樣,設定了rgb元素,但是只讓最終的alpha元素被源alpha值影響到。

void glblendequation(glenum mode)允許我們設定這個操作,有3種可行的選項:

有幾個注意點:為了解決互為半透明物體的透視效果正確,並且深度快取沒有問題。

OpenGL混合模式

glblendfunc是這樣 第乙個引數指出源圖元的alpha的取值計算方法,第二個引數指出目標處的alpha的計算方法。opengl會把源顏色和目標顏色各自取出,並乘以乙個係數 源顏色乘以的係數稱為 源因子 目標顏色乘以的係數稱為 目標因子 然後相加,這樣就得到了新的顏 色。也可以不是相加,新版本...

OpenGL 混合功能

核心 void renderscene glfloat vgreen glfloat vblue glfloat vblack 繪製四個固定矩形 glt shader identity 單元著色器 shadermanager.usestockshader glt shader identity,vr...

opengl渲染管線

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。首先要知道幾個opengl的術語 渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 verte...