Android遊戲之透明混合

Android遊戲之透明混合

OpenGL要啟用混合,要將每個頂點顏色ALPHA分量置設為0.5f.這樣模型後方對象都能透過模型睇到

1.       OpenGL ES 將在『深度緩存Z-Buffer』和『幀緩存』中渲染模型

2.       OpenGL ES結合z-buffer啟用混合時.必需確保所有透面對象跟據其距離照相機遠近按升序排序.並且從後往線渲染對象.所有非透明必須在透明對象之前被渲染,而非透明對象不需要經過排序

啟用混合:

1.       啟用深度檢測(Z軸緩存)一定要調用glEnable(GL_DEPTH_TEST);.保證光照正確繪製和模形前後正確繪製

2.       啟用混合gl.glEnable(GL10.GL_BLEND);

3.       設定混合方程式gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA);

4.       設定模型透明度gl.glColor4f(1.0f, 1.0f, 1.0f,0.5f);

5.       完成渲染後禁用混合glDisable(GL_BLEND);

當需要在OpenGL ES中啟用混合.需要按以下方式渲染

1.       首先渲染所有不透明對象

2.       將所有透明對象按照其與相機距離運近排序(由遠及近)

3.       渲染排好序透明對象(由遠及近)

混合係數

簡介

GL_ZERO

將顏色設為{0,0,0,0}

GL_ONE

不改變當前顏色(r,g,b,a)*(1,1,1,1)

GL_SRC_COLOR

目標與來源相乘dest (r,g,b,a)* sour (r,g,b,a)

GL_DST_COLOR

來源與目標相乘sour (r,g,b,a)* dest (r,g,b,a)

GL_ONE_MINUS_SRC_COLOR

(r,g,b,a)*((1,1,1,1)- sour(r,g,b,a))

GL_ONE_MINUS_DST_COLOR

(r,g,b,a)*((1,1,1,1)- dest(r,g,b,a))

GL_SRC_ALPHA

(r,g,b,a) * sour(alpha)

GL_DST_ALPHA

(r,g,b,a) * dest(alpha)

GL_ONE_MINUS_SRC_ALPHA

(r,g,b,a) * (1- sour(alpha))

GL_ONE_MINUS_DST_ALPHA

(r,g,b,a) * (1- dest(alpha))

GL_SRC_ALPHA_SATURATE

(r,g,b,a) *MIN (sour(alpha),1-dest(alpha))

 

評論