openGL之雾效果---openGL学习笔记(十二)

  雾效果:使所绘制物体距离观察者越远越看的不清晰。
 
  步骤:首先启用雾,然后设置雾颜色,再指定从多远开始到多远结束,最后指定使用哪种雾方程式。

  注:指定雾开始结束只针对线性雾的方程式有效。

 雾方程式有三种,变化趋势如下:

计算方法如下:

从方程式更能说明雾开始结束只针对线性雾的方程式有效。


 首先在onSurfaceChanged方法中修改平截头体深度,以便直观观察:

public void onSurfaceChanged(GL10 gl, int width, int height) {
    //设置视口
    gl.glViewport(0,0,width,height);
    //计算视口比例
    ratio = (float)width / (float)height;
    //设置矩阵模式
    gl.glMatrixMode(GL10.GL_PROJECTION);
    //加载单位矩阵
    gl.glLoadIdentity();
    //设置平截头体
    gl.glFrustumf(ratio,-ratio,-1f,1f,3f,200f);//为方便观察,所以将平截头体深度加大。
}
之后对雾效果进行测试:

@Override
    public void onDrawFrame(GL10 gl) {

        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        gl.glColor4f(1, 0, 0, 1);
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        gl.glLoadIdentity();
        GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);
        gl.glRotatef(xRotate, 1, 0, 0);
        gl.glRotatef(yRotate, 0, 1, 0);

/*************************启用雾效果*************************/

        gl.glEnable(GL10.GL_FOG); //启用雾
        gl.glFogfv(GL10.GL_FOG_COLOR,BufferUtils.arr2FloatBuffer( new float[]{0.2f,0.2f,0.2f,1} ));//设置雾颜色
//        gl.glFogf(GL10.GL_FOG_START,3);//雾开始距离
//        gl.glFogf(GL10.GL_FOG_END,50);//雾结束距离
//        gl.glFogf(GL10.GL_FOG_MODE,GL10.GL_LINEAR);//线性方程式
        gl.glFogf(GL10.GL_FOG_MODE,GL10.GL_EXP2);//雾方程式
        gl.glFogf(GL10.GL_FOG_DENSITY,0.2f);//雾的浓密程度,默认值:1

/************************绘制十个球体************************/

        float r = 0.4f; //球体半径
        gl.glColor4f(0,0,1,1);
        gl.glTranslatef(-ratio + r,0,0); //先将坐标轴移至距离左边r的距离
        for( int i = 0;i<10;i++ ){
            BufferUtils.drawSphere(gl,0.5f,10,10);
            gl.glTranslatef(0.4f,0,0);//每画一个球先向右移动0.4
            gl.glTranslatef(0,0,-3f);//再向里移动3
        }

    }
应用了雾效果前后对比图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值