OpenGL ES 雾

1、新建 MyFogRenderer.java

/*
 * 雾
 */
public class MyFogRenderer extends MyAbstractRenderer{

	public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
        //设置清屏色(背景)
        gl.glClearColor(0, 0, 1, 1);
        //启用顶点缓冲区
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    }
	protected void drawBefore(GL10 gl) {
		//清除颜色缓冲区 |深度缓冲区
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
		//启用深度测试
		gl.glEnable(GL10.GL_DEPTH_TEST);
	}
	protected void draw(GL10 gl) {
		
		//雾
		float fogColor[] ={1,1,1,1};
		gl.glEnable(GL10.GL_FOG);//启用
		gl.glFogfv(GL10.GL_FOG_COLOR, BufferUtil.arr2FloatBuffer(fogColor));//颜色
		gl.glFogf(GL10.GL_FOG_START, 3);//距离眼球 开始距离 
		gl.glFogf(GL10.GL_FOG_END, 30);//距离眼球 结束距离 
		
//		雾化模式 	雾化方程
//		GL_LINEAR 	f = (end – c) / (end – start)
//		GL_EXP 	f = exp(-d * c)
//		GL_EXP2 	f = exp(-(d * c)2)
//		c是渲染片段离观察平面的距离,end是GL_FOG_END指定的距离。start是GL_FOG_START指定的距离。d是雾色的浓度
		
		gl.glFogf(GL10.GL_FOG_DENSITY, 0.2f);//密度
		gl.glFogx(GL10.GL_FOG_MODE, GL10.GL_EXP);
		gl.glHint(GL10.GL_FOG_HINT, GL10.GL_NICEST);
		
		float d =0.3f;
		gl.glColor4f(1, 0, 0, 1);
		gl.glTranslatef(0, -0.99f, 1.7f);
		for(int i =0; i <10; i++){
			Draw.drawSphere(gl, 0.1f, 16, 16, false);
			gl.glTranslatef(0, d, -d);//平移
		}
	}
}
2、运行效果 距离越远越白


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值