JavaME 3D游戏开发之雾气和粒子

zhang108 2011-01-21 02:36:15
加精
通过前面几文的学习,我们已经能够使用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游戏开发——模型
...全文
3369 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯布灬Cob 2013-08-12
  • 打赏
  • 举报
回复
学习下 mark之。。。
other213 2013-03-15
  • 打赏
  • 举报
回复
有空再看一下
个案 2011-12-26
  • 打赏
  • 举报
回复
好牛,羡慕
蓝明乐 2011-11-06
  • 打赏
  • 举报
回复
嘻嘻!!!很好
myslmyslsss 2011-02-07
  • 打赏
  • 举报
回复
不是吧,还板车啊
zjhwrobot 2011-02-05
  • 打赏
  • 举报
回复
不错,有意思
superManXsj 2011-02-01
  • 打赏
  • 举报
回复
JAPAN
火星大能猫 2011-01-25
  • 打赏
  • 举报
回复
很有意思的东西
a78782295 2011-01-24
  • 打赏
  • 举报
回复
MARK!!
xg729993292 2011-01-24
  • 打赏
  • 举报
回复
不错,去试试
ddnetplay 2011-01-24
  • 打赏
  • 举报
回复
JavaME 3D游戏开发精品教程
vampiresai 2011-01-24
  • 打赏
  • 举报
回复
先保存下,等着开发SE的时候再用
zm_hs 2011-01-24
  • 打赏
  • 举报
回复
收藏一下!
boxun123 2011-01-24
  • 打赏
  • 举报
回复
说的好!!
a541336298 2011-01-23
  • 打赏
  • 举报
回复
真的吗
talentzxf 2011-01-23
  • 打赏
  • 举报
回复
Opengl的雾气不是用粒子系统实现的!是Pixel Render的。

[Quote=引用楼主 zhang108 的回复:]
通过前面几文的学习,我们已经能够使用JSR239开发包来构建各种游戏场景了,但是总是觉得场景中比较单调,这需要通过一些特效来修饰,本文将要讲述的粒子系统可以用来完成一部分特效。
粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹……
[/Quote]
hg2980986 2011-01-22
  • 打赏
  • 举报
回复
好东西要收藏
Sodino 2011-01-22
  • 打赏
  • 举报
回复
呵呵,为此文章顶一下。
  • 打赏
  • 举报
回复
X谢谢分享
leehun1000 2011-01-22
  • 打赏
  • 举报
回复
多谢哈! 可以试一下了
加载更多回复(5)

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧