opengl粒子系統的簡單實現


Particle表示一個粒子

struct Particle
{
	Vector3f<float> position;/**< 粒子的位置 */
	Vector3f<float> color;   /**< 粒子的顏色 */
	Vector3f<float> v;   /**< 粒子的速度(x,y,z方向) */
	Vector3f<float> g;      /**< 粒子在x,y,z上的加速度 */
	
	Vector2f<float> lt;     /**< 粒子生命值 *//**< 粒子消失的速度 */
};
    //生成每一個粒子的屬性
	for (int i = 0; i < num; i++)
	{
         //位置
		p[i].position._Vector3f.x = Rand(4);
		p[i].position._Vector3f.y = 4.f;
		p[i].position._Vector3f.z = Rand(0.5) + 0.5;
         //顏色
		p[i].color._Vector3f.x = 255;
		p[i].color._Vector3f.y = 0;
		p[i].color._Vector3f.z = 0;
         //初始速度
		p[i].v._Vector3f.x = Rand(0.1) + 1;
		p[i].v._Vector3f.y = 0;
		p[i].v._Vector3f.z = Rand(0.01) -0.01;
        //加速度
		p[i].g._Vector3f.x = Rand(0.01) - 0.01;
		p[i].g._Vector3f.y = Rand(0.05) - 0.05;
		p[i].g._Vector3f.z = Rand(0.01) - 0.01;
         //生命周期
		p[i].lt.data[0] = Rand(20)+20;
		p[i].lt.data[1] = 0.5;
	}

//Shader.vs代碼
     //如果開啟粒子系統
	if(Particle == 1)
	{
        //tt為實際粒子時間,tex.s為粒子的生命周期,time為從程序運行到現在經歷的時間
	   float tt = time - (int(time / tex.s)) *tex.s;
	   position = Position + v*tt + 0.5 * g * tt*tt;
	}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM