OpenGL ES颜色混合

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值