Particle Engine Using OpenGL

原创 2005年05月22日 09:39:00
Particle Engine Using OpenGL
 
一、粒子系统(Particle System
        大量的自然现象可以被精确或近似地使用粒子系统模拟。火焰,喷泉,爆炸,鱼群,气体,星空等等。他们的原理相似。
        一个粒子系统由带有不同属性的物体对象(Object)和一些它们必须遵守的行为规则组成。确切的说这些属性和规则依赖于你想模拟的现象。一些粒子系统可能需要大量的属性和复杂的规则,然而有些可能极为简单。
        每个粒子需要一些属性来和其他粒子区别。通常在一个系统中的所有粒子有一个相同的属性集。
有一些适用于粒子的典型属性:
1.位置(Position):粒子在哪里。
        处理运动粒子的每个粒子系统都需要知道每个粒子的位置。二维空间需要二维坐标(x , y),三维空间需要三维坐标(x , y , z)
2.速度(Velocity):包括速率(speed)和方向(direction)
        位置的改变依赖于速度。速度是一个矢量表明系统由多快和粒子的运动方向。每一时间间隔,速度用于改变粒子位置。
3.加速度(Acceleration):
        和速度作用于位置一样,加速度作用于速度。粒子的加速度通常适用于外力作用。外力经常是重力,或者是粒子间的引力或斥力。
4.生命值(Life):
        每个粒子都有着自己的生命值,随着时间的推移,粒子的生命值不断减小,直到粒子死亡(生命值为0)。一个生命周期结束时,另一个生命周期随即开始,有时为了使粒子能够源源不断地涌出,必须使一部分粒子在初始后立即死亡。
5.衰减(Decay):
        就象人会衰老一样,每个粒子也有它自己的生命周期,Decay就是用来控制粒子生命周期的一个物理量。
 
二、OpenGL中三维变换
    OpenGL中有最主要的坐标系是模型坐标系和观察坐标系。默认情况下,模型坐标系是右手坐标系,原点在屏幕左下角,原点右方向是X axis,向上方向是Y axis。观察坐标系是左手坐标系,X axis和Y axis和观察坐标系方向相同,Z axis则相反,指向屏幕内部。
    OpenGL中提供了丰富的图形变换函数,这些函数都是通过矩阵操作实现的。OpenGL提供了三种矩阵操作函数。
    Void glMartixMode(GLenum mode);
mode                    功能
GL_MODEVIEW             模型视图矩阵堆栈。几何模型的平移、旋转、比例缩放都是通过该函数设定的堆栈完成。视点变换也是通过这个堆栈?
GL_PROJECTION           观察矩阵堆栈。void glOrtho()和void glPerspective()改变投影变换定义的观察体
GL_TEXTURE              纹理矩阵堆栈
 
在OpenGL中,平移、旋转和缩放变换的组合会产生复杂的变换效果。不同的变换次序会产生不同的效果。
因为这些函数都是对当前矩阵的操作,并且是累乘的。例如glRotatef()函数的功能实际上是用模型视图矩阵堆栈的当前矩阵乘以该函数定义的矩阵,glTranslatef()则是用前面旋转函数产生的矩阵再乘以该函数定义的矩阵。这种效果就相当于每次变换都建立了一个新的坐标系(在原坐标系基础之上),在当前矩阵堆栈未单位化之前,所有的操作都是在这个坐标系进行的。
下面是Demo中的代码:
glRotatef(90.0f,1.0f,0.0f,0.0f);      // Tilt The View
glRotatef(10.0f,0.0f,1.0f,0.0f);      // Rotate To The Current Stars Angle(10.0f)
glTranslatef(5.0f,0.0f,0.0f);        // Move Forward On The X Plane
glRotatef(-10.0f,0.0f,1.0f,0.0f);    // Cancel The Current Stars Angle
glRotatef(-90.0f,1.0f,0.0f,0.0f);
这段代码不仅将模型沿X axis上移动了5.0*cos(10)长度,还沿Y axis上移动了5.0*sin(10).
 
三、Blend
    OpenGL中大部分的特效都在某种程度上依赖Blend。Blend被用来混合要显示的象素与屏幕上已存在象素的颜色。颜色怎么混合依赖于Alpha值。Alpha是颜色的第四个分量。在OpenGL中可以用glColor4f()代替glColor3f()来指定Alpha值。
    Alpha值相当于物体的透明度。Alpha=0相当于物体完全透明。Alpha=1相当于物体完全不透明。
    Blend 等式:(Rs Sr + Rd Dr, Gs Sg + Gd Dg, Bs Sb + Bd Db, As Sa + Ad Da)
OpenGL根据上面的等式计算象素的颜色。s和r下标指定了源象素和目标象素。S和D是混合因子,指定了混合的程度。S和D最常用的值是S=(As, As, As, As),D=(1-As,1-As,1-As,1-As).这样Blend等式为:(Rs As + Rd (1 - As), Gs As + Gd (1 - As), Bs As + Bs (1 - As), As As + Ad (1 - As))
       OpenGL中用 glEnable(GL_BLEND);
                glBlendFunc(GL_SRC_ALPHA,GL_ONE);
glDisable(GL_DEPTH_TEST);
打开Blend并关闭深度测试。
 
四、小结
        屈指算来,接触OpenGL已经差不多一个月了。因为没有系统的学习,学的都是些别人的代码中的零碎的知识点。虽然我目前对OpenGL的理解能解释我所观察到的一切现象,但我相信误解在所难免。如果有任何错误的地方请指正,Email me at cofd.eric@163.com
Thanks in advance!
 
参考书目: 《NEHE’s OpenGL tutorial》

Array osgRecipes

osgRecipes自上个月发布以来,得到了不少国内外朋友的帮助,并且迅速地完善和补充更多OSG与其它中间件结合的案例。现在,osgRecipes的integrations目录下的结合案例已经从第一期...
  • whucv
  • whucv
  • 2013年01月16日 20:24
  • 3235

使用OpenGL实现粒子系统: 漂亮的喷雾

漂亮的喷雾   通过出现在像新闻组这样的公共论坛上的次数来判断, 粒子系统是一个相当热点的问题。 一部分原因可能是QUAKE使用了烟雾粒子, 血溅效果和火花落下效果, 并且获得了巨大成功。   ...
  • xingtianxia710
  • xingtianxia710
  • 2012年01月06日 23:19
  • 12551

Particle Engine介绍

Particle Engine介绍         本文介绍我自己开发的一个游戏编辑器,Particle Engine的主要功能和基本操作;介绍分为三个部分,第一部分介绍开发PE的原因和PE的主要功...
  • liangneo
  • liangneo
  • 2012年12月28日 03:16
  • 2629

OpenGL ES 2.0 Shader相关介绍

最近手机项目要用到opengl和shader,虽然此前也搞过opengl,那时对opengl掌握的也还算熟悉,时隔四五年后,再翻看以前的程序,有些茫然,虽然大体明白怎么回事,但是很多技术细节忘了个干净...
  • u013085897
  • u013085897
  • 2014年06月28日 14:15
  • 4383

第十八课:公告板与粒子2

翻译自:http://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/particles-instancing/...
  • qq_22822335
  • qq_22822335
  • 2016年02月29日 15:13
  • 360

织梦导入 'USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=gbk' at line 13

-- -- 表的结构 `whmc_purview` -- CREATE TABLE IF NOT EXISTS `whmc_purview` ( `mid` mediumint(8) DEFAU...
  • jsbba
  • jsbba
  • 2013年12月07日 14:30
  • 2843

right syntax to use near 'USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8' at line 6

在使用navicat for mysql 10.0.10将服务器上生成的数据库备份还原到本地数据库时,出现以下问题:[Err] 1064 - You have an error in your SQL...
  • testcs_dn
  • testcs_dn
  • 2015年01月25日 13:28
  • 6812

OpenGL--粒子系统

理论基础 1,粒子系统的基本思想是用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体(一般由点或很小的多边形通过纹理贴图表示),侧重于物体的总体形态和特征的动态变化。把物体定义为许多不规则,随...
  • u010223072
  • u010223072
  • 2015年05月21日 10:32
  • 7748

ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针

ArcGIS Engine自定义工具类,实现添加图名,比例尺,指北针等。 自定义工具类,实现添加图名,比例尺,指北针 ...
  • MZLXF
  • MZLXF
  • 2011年05月21日 21:52
  • 1559

ERROR 1286 (42000): Unknown table engine ‘InnoDB’

在对mysql库进行导出表结构时,发现报错: mysqldump:Got Error: 1286: Unknown table engine 'InnoDB? when using LOCK T...
  • u011743378
  • u011743378
  • 2014年08月22日 13:00
  • 2926
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Particle Engine Using OpenGL
举报原因:
原因补充:

(最多只允许输入30个字)