OpenGL ES颜色混合

来源:互联网 发布:怕出头知乎 编辑:程序博客网 时间:2024/06/06 00:58

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 dfactorgl.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、运行效果


0 0
原创粉丝点击