粒子系统说起来高深摸测,其实就是许多许多许多许多许多许多的点图象,然后对其进行运行速度,方向,衰减的处理。
本文粒子系统的实现是基于图形API,OPenGL。语言是:C++。
不可少的,先定义一些全局变量。
const
int
MaxPoint
=
1000
; //粒子的个数;
float slowdown=2.0f;
float xspeed; //粒子的速度,这里没有给出。可以自己加
float yspeed;
float yspeed;
GLuint loop; //循环变量
GLuint col; //颜色变量。注意:再循环之中必须加上一个判断语句。因为我们的颜色只有12种!
GLuint col; //颜色变量。注意:再循环之中必须加上一个判断语句。因为我们的颜色只有12种!
既然是对N多数据操作的系统,首先我们需要拥有一个数据结构。
typedef
struct
{
{
思考一下。粒子系统需要些什么?
①方位数据。
②颜色数据。
③移动方向与速度。
④是否活动等衰减数据。
就是这些。
bool
active;
//
该粒子是否活动;
float life; // 该粒子生命值^@^
float fade; // 该粒子衰减速度
float x; // 坐标数据
float y;
float z;
float r; // 颜色数据
float g;
float b;
float xi; // 运动方向及速度
float yi;
float zi;
float xg; // 重力加速度
float yg;
float zg;
}SPoint;
float life; // 该粒子生命值^@^
float fade; // 该粒子衰减速度
float x; // 坐标数据
float y;
float z;
float r; // 颜色数据
float g;
float b;
float xi; // 运动方向及速度
float yi;
float zi;
float xg; // 重力加速度
float yg;
float zg;
}SPoint;
插入一个颜色的定义(这里面定义了12种颜色。估计没问题):
static
GLfloat colors[
12
][
3
]
=
//
颜色
{
{ 1.0f , 0.5f , 0.5f },{ 1.0f , 0.75f , 0.5f },{ 1.0f , 1.0f , 0.5f
{
{ 1.0f , 0.5f , 0.5f },{ 1.0f , 0.75f , 0.5f },{ 1.0f , 1.0f , 0.5f