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)) |