一个简单的粒子系统
一个简单的小程序,欢迎大家都来交流交流。
环境要求
环境:glew-1.9,freglut,Opengl,IDE:vs2012,win32
粒子系统效果
粒子实现的喷泉效果:
喷泉效果参数:
// param1 构造参数
float startcol[4] = {0.5f, 0.3f, 0.2f, 1.0f};
float colfactor[4] = {-0.01f, 0.005f, 0.00f, 0.0f};
GLuint showlist = 0;
// param2 构造参数
float udvParam[3] = {1.0f, 0.0f, 0.0f}; // 方向向量不必为单位向量,因为 actionDescriptor 的构造函数会自动将其单位化
float rotateParam[3] = {0.0f, 0.0f, 90.0f};
float rotateVarParam[3] = {0.0f, 10.0f, 10.0f};
float speedParm = 0.06f;
float speedFactorParam[2] = {1.0f, 0.02f};
// param3 构造参数
uint32 lifelong = 2000; // 粒子生存时间ms
粒子实现的落雪效果:
落雪效果参数:
// param1 构造参数
float startcol[4] = {0.5f, 0.5f, 0.5f, 1.0f};
float colfactor[4] = { 0.0f, 0.0f, 0.00f, 0.0f};
GLuint showlist = 0;
// param2 构造参数
float origionPlaneParam[2] = {0.5f, 0.5f};
float planeNormalsParam[3] = {0.0f, -1.0f, 0.0f};
float speedParam = 0.002f;
float speedFactorParam[2] = {0.975f, 0.0f};
float forceParam[3] = {0.0f, 0.00f, 0.0f};
// param3 构造参数
uint32 lifelong = 2000; // 粒子生存时间ms
主要数据结构
粒子系统中包含以下类和结构体:
class clock;
class randomMaker;
class appearanceDescriptor;
class actionDescriptor;
class lifeDescriptor;
class particle;
class anti;
简单说明以下这些类的功能:clock是一个计时器;randomMaker是一个随机数产生器,是我从Opencv里刨出来的,精简之后封装了一下;particle是粒子类,包含了粒子的各种属性,颜色,速度,位置,方向,生命长度等;粒子的所有属性大致分为三种,外观,动作和生命期,为了描述方便我把三种属性分别封装为appearanceDescriptor(外观描述符),actionDescriptor(动作描述符),lifeDesCriptor(生命期描述符);anti用来管理一组粒子,构造anti是通过提供上边三个例子描述符的类规定粒子的外观,动作和存在的时间。
项目源文件及其下载地址
下载地址:particleSys.zip
下载后请认真核对压缩文件信息:
大小: 18464009 字节
MD5: 8AD880E643E7A078CEA7508C670E0D75
SHA1: CE000E3741FFD2945DAE57DECEFEA5A580E7E231
CRC32: 996BD6F0