现在的位置: 首页 > 综合 > 正文

OpenGL系统设计-粒子系统(3)

2013年09月16日 ⁄ 综合 ⁄ 共 2266字 ⁄ 字号 评论关闭

上面我们完成了一个粒子类的创建,从粒子类中可以看到,每一个粒子是处在一个粒子系统中的,所有粒子的行为都受到粒子系统的影响。下面再来看粒子系统类的构造。

 

//粒子系统类的定义

class CParticleSystem

{

private:

    bool mAttracting;           // 粒子系统是否对粒子产生引力

    bool mStopped;              // 粒子是否停止了发射

   

    unsigned int    mTexture;           //粒子纹理

   

    unsigned int mParticlesPS;      // 每秒发射出的粒子数

    unsigned int mParticlesAlive;   // 当前存活的粒子数

   

    float mAge;             //系统的当前生命,和粒子是两回事

   

    float mLastTimeUpdate;          // 系统上次更新时间

    float mEmissionResidue;    

   

public:

    CParticle particle[MAX_PARTICLES];  //所有的粒子

   

    // VERTEX3D是一个很简单的表示三维坐标点的类

    VERTEX3D mPreviousLocation;     //系统上一次的位置

    VERTEX3D mCurrentLocation;      //系统的当前已知位置

    VECTOR3D mVelocity;         //系统的当前速度

   

    float mStartSize;           //粒子的开始大小

    float mSizeCounter;     //粒子大小变化计数器

    float mEndSize;         //粒子的最大的大小

   

    float mStartAlpha;          //粒子的开始透明度

    float mAlphaCounter;

    float mEndAlpha;            //粒子的最大透明度

   

    VECTOR3D mStartColor;  

    VECTOR3D mColorCounter;

    VECTOR3D mEndColor;

   

    float mSpeed;               //系统的速度

    float mSpeedCounter;        //系统速度计数器

   

    float mLife;                //系统的生命

    float mLifeCounter;     //系统生命计数器

   

    float angle;                //粒子系统的角度,90表示半球面,//180表示整个球面。

   

    int mSpreadMin;         //用于沿着粒子发射器对粒子随机定位

    int mSpreadMax;

    float mSpreadFactor;       

   

    VECTOR3D mGravity;      //XYZ方向上的重力加速度

    float mAttractionPercent;       //引力百分比

   

    bool Update(float time, int flag, float num_to_create);

    void Render(GLvoid);

    unsigned int ActiveParticles(void);

    float GetLocation(int coordinate);

   

    void SetLocation(float x, float y, float z);

    void SetTexture(GLuint texture);

    void SetParticlesPerSec(unsigned int number);

    void SetVelocity(float xv, float yv, float zv);

    void SetSize(float startsize, float endsize);

    void SetAlpha(float startalpha, float endalpha);

    void SetSpeed(float Speed);

    void SetAngle(float half_angle);

    void SetSystemFlag(int flag, bool state);

    void SetColor(float red1, float green1, float blue1, float red2, float green2, float blue2);

    void SetLife(float seconds);

    void SetSpread(int SpreadMin, int SpreadMax, float SpreadFactor);

    void SetAttraction(unsigned int Attraction_Percent);

    void SetGravity(float xpull, float ypull, float zpull);

   

    bool IsAttracting(void){    return mAttracting; }

    bool IsStopped(void){   return mStopped;    }

   

    CParticleSystem();

    ~CParticleSystem();

};

【上篇】
【下篇】

抱歉!评论已关闭.