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、运行效果 距离越远越白