为什么要使用混合:
混合是诸如透明化,数字合成,油漆这类技巧的核心。
怎么理解混合:
如果启用了混合,alpha值常常用于把被处理片段的颜色值与已经存储在帧缓冲区中的像素颜色值进行混合。
如果不适用混合,每个新片段将会改写帧缓冲区中已经存在的颜色值,就好像该片段是不透明的那样。
直白点理解的话,就是如果没有开启混合,前面的图层会把后面的图层盖住,就看不见了。但是如果开启了混合,就好像通过一片有色玻璃去看后面的图层。
怎么开启和关闭混合:
开启:
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE); //以下是为了启动混合功能
gl.glEnable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);
关闭:
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDisable(GL10.GL_BLEND);
核心部分,片段是怎么混合的:
源因子:直白的理解就是假设有两张一前一后的图片,源因子就是前面的那张图片。(Sr,Sg,Sb,Sa)
目标因子:直白的理解就是假设有两张一前一后的图片,源因子就是后面的那张图片。(Dr,Dg,Db,Da)
源RGBA: (Rs,Gs,Bs,As)
目标RGBA:(Rd,Gd,Bd,As)
glBlendFunc函数就是用来选择什么样的源RGBA和目标RGBA。
最后生成的颜色和透明度为:(RsSr+RdDr,GsSg+GdDg,BsSb+BdDb,AsSa+AdDa)
几个注意点:
1.Alpha值只有在开启混合的情况下,才有意义。也就是Alpha值在普通贴纹理的情况下并不会有影响。
2.顶点颜色与纹理颜色的关系,在没有开启混合的情况:
当纹理颜色与顶点颜色不一样是,最后的颜色为黑色。
当纹理颜色为白色时,最后的颜色为顶点颜色。
当纹理颜色和顶点颜色一样时,最后的颜色为原来的颜色。