在Android上使用OpenGL ES开发时,模仿自然界的各种现象是很常见的,比如光照、雾气、飘动等效果,今天我们就来使用OpenGL ES实现自然界的雾气效果,雾气效果很简单,我们今天就使用系统自带的三种雾气渲染算法来实现不同的效果,当然你可以自己设置雾气的颜色和范围程度等。
本节的代码是基于Android OpenGL | ES给立方体进行纹理映射一文的代码上修改的,我会重点提到雾气渲染这一块,当然在文章最后你也可以下载到完整的源码。效果图:
我们在继承Renderer类的GLRenderer的基础上加上一些雾气使用的成员变量:
Java代码
- //雾气模式
- privateintfogMode[]={GL10.GL_EXP,GL10.GL_EXP2,GL10.GL_LINEAR};
- //雾气的颜色
- privatefloatfogColor[]={0.5f,0.5f,0.5f,1.0f};
变量fogMode用来保存三种类型的雾:GL_EXP,GL_EXP2和GL_LINEAR,这就是我开头提到的三种系统对雾气效果的渲染方式,我将在稍后解释这三种类型的区别。变量fogColor保存雾的颜色。
接着我们就需要在onSurfaceCreated方法中加上一些启用雾气、雾气模式等代码,实现雾气效果的代码很少也很简单,我们一条条的添加上去:
Java代码
- //设置清除屏幕时所用的颜色,参数依次为红、绿、蓝、Alpha值
- //设置背景的颜色为雾气的颜色
- gl.glClearColor(0.5f,0.5f,0.5f,1.0f);
为了获得更好的效果,glClearColor()这个方法已经使用了将屏幕清为同雾相同的颜色的颜色值。
Java代码
- //设置雾气的模式
- gl.glFogx(GL10.GL_FOG_MODE,fogMode[2]);
这行代码,我们看到使用了前面我们声明和定义的雾气渲染模式的变量。之前我们声明了数组fogMode,它保存了值GL_EXP, GL_EXP2, and GL_LINEAR。现在是使用他们的时候了。我来解释它们:
GL_EXP - 充满整个屏幕的基本渲染的雾。它能在较老的PC上工作,因此并不是特别像雾。
GL_EXP2 - 比GL_EXP更进一步。它也是充满整个屏幕,但它使屏幕看起来更有深度。
GL_LINEAR - 最好的渲染模式。物体淡入淡出的效果更自然。
Java代码
- //设置雾气的颜色
- gl.glFogfv(GL10.GL_FOG_COLOR,fogColor,0);
设置雾的颜色。之前我们已将变量fogcolor设为(0.5f,0.5f,0.5f,1.0f),这是一个很棒的灰色。
Java代码
- //设置雾气的密度
- gl.glFogf(GL10.GL_FOG_DENSITY,0.35f);
- //设置雾气的系统透视方案
- gl.glHint(GL10.GL_FOG_HINT,GL10.GL_DONT_CARE);
GL_FOG_DENSITY表明这是在设置雾的密度。增加数字会让雾更密,减少它则雾更稀。 glHint (GL_FOG_HINT, GL_DONT_CARE); 设置修正。GL_DONT_CARE表示我不关心它的值。另外还有下面的几个参数:
gl_nicest - 对每个像素执行雾效计算(效果好)
gl_fastest - 对每个顶点执行雾效计算 (更快,但效果不如上面的好)
Java代码
- //雾气开始地方
- gl.glFogf(GL10.GL_FOG_START,1.0f);
- //雾气结束地方
- gl.glFogf(GL10.GL_FOG_END,5.0f);
glFogf(GL_FOG_START, 1.0f);设定雾效距屏幕多近开始。你可以根据你的需要随意改变这个值。下一行类似,glFogf(GL_FOG_END, 5.0f);告诉OpenGL程序雾效持续到距屏幕多远。
Java代码
- //开启雾气
- gl.glEnable(GL10.GL_FOG);
这一行应该很熟悉吧,就是告诉系统开启雾气特效。这一段的完整代码如下:
Java代码
- //当窗口被创建时我们可以做些初始化工作
- @Override
- publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
- //TODOAuto-generatedmethodstub
- //设置清除屏幕时所用的颜色,参数依次为红、绿、蓝、Alpha值
- //设置背景的颜色为雾气的颜色
- gl.glClearColor(0.5f,0.5f,0.5f,1.0f);
- //设置雾气的模式
- gl.glFogx(GL10.GL_FOG_MODE,fogMode[2]);
- //设置雾气的颜色
- gl.glFogfv(GL10.GL_FOG_COLOR,fogColor,0);
- //设置雾气的密度
- gl.glFogf(GL10.GL_FOG_DENSITY,0.35f);
- //设置雾气的系统透视方案
- gl.glHint(GL10.GL_FOG_HINT,GL10.GL_DONT_CARE);
- //雾气开始地方
- gl.glFogf(GL10.GL_FOG_START,1.0f);
- //雾气结束地方
- gl.glFogf(GL10.GL_FOG_END,5.0f);
- //开启雾气
- gl.glEnable(GL10.GL_FOG);
- ......
- }
相关推荐
在Android应用开发中,利用OpenGL ES可以实现许多视觉特效,其中包括模拟自然界中的雾气效果。本篇文章将深入探讨如何通过OpenGL ES在Android中实现雾气效果,并基于提供的"OpenGLFogTest"源码进行解析。 首先,...
在这个"Android下 OpenGL ES 2.0 混合半透明效果demo"中,我们将探讨如何在Android应用中实现半透明效果的混合。 首先,理解OpenGL ES 2.0的核心概念至关重要。它基于着色器模型,这意味着开发者可以编写顶点着色器...
平台:Android 语言:GLSL(OpenGL ES) 算法:MetaBall 效果:2D融球效果
android平台利用opengles2.0技术实现的3D 翻书特效,带有完美阴影和光照技术;目前仅支持从右下角开始翻转,翻过一定角度松手后,自动翻转过去,否则的话,松手则还是翻回来;阴影是使用的阴影平面技术实现的,效果...
`GLSurfaceView`充当OpenGL ES与Android View层次结构之间的桥梁,它不仅适应于Android Activity的生命周期,还简化了Framebuffer像素格式的选择,以及创建和管理绘图线程,确保动画效果平滑流畅。此外,它还提供了...
OpenGL ES在Android平台上的应用是实现3D图形渲染的关键技术,而Obj文件格式是一种常见的3D模型数据交换格式。在Android开发中,如果想要将Obj格式的3D模型导入到应用中,就需要对OpenGL ES有深入的理解,并且掌握...
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建高性能的2D和3D图形。在这个主题中,我们主要关注如何在Android平台上使用OpenGL ES绘制一个透明的三维/空间坐标系。这个过程...
该案例代码为Android 平台OpenGL ES实现举例,有两个作用: ...2、使用 OpenGLES 生成与使用Mipmap纹理,构建远处模糊,近处清晰的效果。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/8873106
最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...
在Android系统中,OpenGL ES被用来实现高质量的图形渲染,包括粒子系统和火焰效果。 粒子系统是一种模拟复杂视觉效果的技术,通过大量小的、简单的图形(粒子)组合来创造出如烟雾、火花、水流等动态效果。在OpenGL...
在 Android Studio 2.1.3 中,要实现一个使用 OpenGL ES 3.0 的旋转三角形,你需要遵循以下步骤: 1. **设置项目配置**:首先确保你的 Android Studio 支持 OpenGL ES 3.0。在 `build.gradle` 文件的 `default...
在Android平台,使用OpenGLES3.0实现纹理纹理、颜色混合代码实现举例。 具体案例文章讲解请见: https://xiaxl.blog.csdn.net/article/details/121634894
实现动画效果ES2Renderer,PaintingView.m
在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...
android平台上,用opengl es实现图片的波浪效果,可点击图片产生多个波浪
这是用androidOpenGL 实现的3D 动画 导入工程即可运行。
本教程主要探讨如何在Android系统上,利用OpenGLES2.0图形库来处理和显示从Camera获取的YUV原始数据。YUV是一种常见的颜色空间,广泛应用于视频编码和解码,因为它对带宽的要求相对较低,特别适合移动设备。 首先,...
Android平台,OpenGL ES3.0 点、线、三角形绘制方式源码实现举例。 相关绘制方式文章讲解请参考: https://xiaxl.blog.csdn.net/article/details/8873002
在Android的JNI层使用OpenGL ES,可以实现高性能的图形绘制,包括自定义UI元素、游戏图形和其他复杂视觉效果。要使用OpenGL ES,首先需要在JNI层初始化OpenGL ES上下文,然后创建顶点和纹理数据,最后通过绘制调用来...
在Android平台上,开发一款具有逼真翻页效果的电子书应用是一项挑战,但可以通过使用OpenGL ES来实现。OpenGL ES(OpenGL for Embedded Systems)是OpenGL的一个轻量级版本,专为嵌入式设备如手机和平板设计,用于...