日期:2014-05-20  浏览次数:20744 次

JavaME 3D游戏开发之雾气和粒子
通过前面几文的学习,我们已经能够使用JSR239开发包来构建各种游戏场景了,但是总是觉得场景中比较单调,这需要通过一些特效来修饰,本文将要讲述的粒子系统可以用来完成一部分特效。
粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。
首先来说说雾气吧,因为雾气会比较简单,也是Opengl种提供了现成的api,不用我们自己去实现,首先比较一下下图中左边是没有使用雾气的效果,右边是使用了雾气的效果。

Opengl中一共提供了三种雾气模式,他们分别是:GL10.GL_EXP, GL10.GL_EXP2, GL10.GL_LINEAR,下面我们将介绍着三种雾气模式的使用,以及他们的不同地方。使用雾气的代码如下:
public void fogTest() {
    // 雾气的模式
    int fogMode[] = { GL10.GL_EXP, GL10.GL_EXP2, GL10.GL_LINEAR };
    // 雾的颜色设为白色
    float fogColor[] = { 0.5f, 0.5f, 0.5f, 1.0f };
    // 设置雾气的模式
    gl.glFogx(GL10.GL_FOG_MODE, fogMode[1]); 
    // 设置雾的颜色
    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, 0.1f); 
    // 雾气的结束位置
    gl.glFogf(GL10.GL_FOG_END, 5.0f); 
    // 启用
    gl.glEnable(GL10.GL_FOG); 
}
对雾气的设置可以使用glFogx(或者glFogfv\glFogf)函数,根据不同的参数有不同的功能,其中glFogfv(GL_FOG_COLOR, fogcolor);设置雾的颜色。之前我们已将变量fogcolor设为(0.5f,0.5f,0.5f,1.0f),所以这里我们就直接使用fogColor了。glFogf(GL_FOG_DENSITY, 0.35f);这行设置雾的密度。增加数字会让雾更密,减少它则雾更稀。glHint (GL_FOG_HINT, GL_DONT_CARE); 设置修正。我使用了GL_DONT_CARE因为我不关心它的值。glFogf(GL_FOG_START, 1.0f);设定雾效距屏幕多近开始。你可以根据你的需要随意改变这个值。glFogf(GL_FOG_END, 5.0f);告诉OpenGL程序雾效持续到距屏幕多远。
glFogi(GL_FOG_MODE, fogMode[fogfilter]);建立雾的过滤模式。下面是3中雾气模式之间的区别:
? GL_EXP :充满整个屏幕的基本渲染的雾。它能在较老的PC上工作,因此并不是特别像雾。
? GL_EXP2:比GL_EXP更进一步。它也是充满整个屏幕,但它使屏幕看起来更有深度。
? GL_LINEAR:最好的渲染模式。物体淡入淡出的效果更自然。
对于每一种雾气模式的效果,大家可以自己测试,这里我们就不在贴图了。雾气的效果是Opengl本身提供的,但是如果我们要使用其他的特效,就需要我们自己来实现了,下面我们分析如何实现一个粒子系统。
粒子系统实际上就是采用大量的、具有一定生命和属性的微小粒子图元作为基本元素来描述不规则的模糊物体。在粒子系统中,每一个粒子图元均具有:形状、大小、颜色、透明度、运动速度和运动方向、生命周期等属性。而一个粒子究竟有什么样的属性,主要取决于粒子系统用来模拟什么。粒子系统是动态变化的,粒子系统的所有属性都是时间t的函数,随着时间的推移,系统中不断有新粒子的加入,旧的粒子死亡,系统中“存活”的粒子其位置及生命值亦随时间变化而变化。随着虚拟世界时间的流逝,每个粒子都要在虚拟世界经历“产生”、“活动”和“消亡”三个阶段。因此我们就需要用程序语言来模拟这每个粒子的生命周期变换,从而形成一个粒子效果。

详细内容:http://g.csdn.net/5168983

其他内容:
JavaME 3D游戏开发框架(一)
JavaME 3D游戏开发框架(二)
JavaME 3D游戏开发——基本图形渲染
JavaME 3D游戏开发——3D图形渲染
JavaME 3D游戏开发——光效 
JavaME 3D游戏开发——材质
JavaME 3D游戏开发——纹理
JavaME 3D游戏开发——纹理映射
JavaME 3D游戏开发——模型
------解决方案--------------------
没怎么玩过J2ME,有空看看
------解决方案--------------------
JSR239开发包来构建各种游戏场景
------解决方案--------------------
该回复于2011-01-21 16:34:28被版主删除
------解决方案--------------------
嗯 可以去试试 谢了
------解决方案--------------------
该回复于2011-01-24 11:17:42被版主删除
------解决方案--------------------
嗯 可以去试试 谢了
------解决方案--------------------
该回复于2011-01-24 11:21:39被版主删除
------解决方案--------------------