openGL粒子系统实现(面向对象风格)

该博客介绍了如何使用C++和基本的openGL实现一个面向对象风格的粒子系统。粒子系统由粒子和粒子发生器组成,其中粒子类包含属性但无方法。发生器作为基类,通过继承创建不同效果的粒子,如RainGenerator。文章展示了颜色数组在粒子运动过程中的应用,并提供了集成器以管理多个粒子系统。最后,展示了不同效果的粒子系统实例,包括雨落和太阳等,并指出虽然这里未使用GLSL,但在有条件的情况下,使用GLSL可以提高效率。
摘要由CSDN通过智能技术生成

使用基本openGL(非GLSL)实现一个面向对象风格粒子系统。

粒子系统基本有两部分构成

  • 粒子
  • 粒子发生器
一个粒子发生器控制一群粒子的行为,比如一条流水,一团火。
而本文的粒子系统在发生器上多封装一层
  • 发生器集合
也就是把多个发生器集合起来,方便同时加入多个相同的粒子系统(比如同时需要很多团火焰)。
下面开始逐层介绍。


粒子类

粒子类代表每个粒子,只有属性没有方法,如下:

class Particle {  
public:

    GLfloat life; //剩余生命
    GLfloat fade; //衰减速度
      
    //颜色
    GLfloat r;
    GLfloat g;
    GLfloat b;
      
    //位置
    GLfloat x;  
    GLfloat y;  
    GLfloat z;  
      
    //速度
    GLfloat xVel;  
    GLfloat yVel;  
    GLfloat zVel;  
      
    //加速度
    GLfloat xAcc;  
    GLfloat yAcc;  
    GLfloat zAcc;  

};

这就是本粒子系统中粒子的全部属性。而粒子发生器通过控制每个例子的以上属性来控制整个粒子群。

发生器是一个基类,而通过其不同的继承类实现不同效果的粒子系统。基类如下:

class Generator{
public:
	//粒子初始化与再造函数
	virtual void particleInit(int i)=0;	

	//粒子更新函数
	virtual void particleUpdate(int i)=0;

	//粒子渲染函数
	void particleDisplay(int i){
		glColor4f(
			particles[i].r, 
			particles[i].g, 
			particles[i].b,
			particles[i].life/particleLife
			);  

		glPointSize(particleSize);  

		glBegin(GL_POINTS);  
		glVertex3f(
			particles[i].x, 
			particles[i].y, 
			particles[i].z);   
		glEnd(); 
	}

	//发生器循环函数
	void particleMainLoop(){
		for(int i = 0; i < particleCou
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值