1、新建 MyBlendRenderer.java
//颜色 混合
//启用混合时,新颜色与颜色缓冲区的原有颜色进行组合,通过对这些颜色进行不同的组合,可以产生许多不同的特殊效果
//已经存在颜色缓冲区中的颜色称为 目标颜色
//作为当前渲染命令的结果进入缓冲区的颜色值称为 源颜色。它可能与目标颜色进行交互,也可能不交互
/*
* S:源颜色混合因子
* D:目标颜色的混合因子
* Cs:源颜色
* Cd:目标颜色
* Cf:结果颜色
* Cf =(Cs *S) +(Cd *d)
*/
public class MyBlendRenderer extends MyAbstractRenderer{
public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
//设置清屏色(背景)
gl.glClearColor(0, 0, 0, 1);
//启用顶点缓冲区
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
//单调模式 没有过度
gl.glShadeModel(GL10.GL_FLAT);
}
protected void drawBefore(GL10 gl) {
//清除 颜色 深度
gl.glClear(GL10.GL_COLOR_BUFFER_BIT
|GL10.GL_DEPTH_BUFFER_BIT);
}
protected void draw(GL10 gl) {
float br =0.4f;
float fr =0.2f;
float z =0.4f;
float []back ={
0 ,br ,-z,
0 ,0 ,-z,
br ,br ,-z,
br ,0 ,-z,
};
float []front ={
-fr ,fr ,z,
-fr ,-fr ,z,
fr ,fr ,z,
fr ,-fr ,z
};
//颜色混合
gl.glEnable(GL10.GL_BLEND);
//设置混合因子
//int sfactor,
//int dfactor
gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA );
gl.glColor4f(0, 0, 1, 1f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(back));
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, back.length/3);
gl.glColor4f(0, 1, 0, 0.5f);
Draw.drawCube(gl, 0.2f);
gl.glColor4f(1, 0, 0, 0.5f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(front));
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, front.length/3);
}
}
2、运行效果