You need to upgrade your Flash Player You may download it directly from Adobe here.
You should also check to make sure Javascript is enabled.

Particle Engine

     Particle engines are used a lot in 3D applications.  Basically they can be defined by a large array of certain variables.  X, Y, and Z coordinates are required.  Increment variables for the X, Y, Z variables are also required.  

Here's a simple example of the particle engine array:

#define MAX_PARTICLES 100   // Number of particles

typedef struct // Create A Structure For Particle
{
  float life;  // Particle Life
  float fade;  // Fade Speed
  float x;  // X Position
  float y;  // Y Position
  float z;  // Z Position
  float xi;  // X Direction
  float yi;  // Y Direction
  float zi;  // Z Direction
}
particles;  // Particles Structure

particles particle[MAX_PARTICLES];  // Particle Array 

     Other variables could be put into the array easily, such as Red, Green, and Blue variables.  

To initialize the particles, use this code:

int loop;
float V,Angle; 

for (loop=0; loop<MAX_PARTICLES; loop++) // Initializes All The Textures
{
  particle[loop].life=1.0f; // Give All The Particles Full Life
  particle[loop].fade=float(rand()%100)/1000.0f+0.05f; // Random Fade Speed

  V = float(rand()%25);  // Speed of the particle 
  Angle = float(rand()%360);  // Angle of the particle

  particle[loop].x = 0;  // Set X position
  particle[loop].y = 0;  // Set Y position
  particle[loop].z = 0;  // Set Z position

  particle[loop].xi = sin(Angle) * V;  // Set X velocity
  particle[loop].yi = cos(Angle) * V;  // Set Y velocity
  particle[loop].zi = float
(((rand()%10)-5)/10) * V;  // Set Z velocity
}

     Finally, to draw the particles and animate them you will probably want to find a texture to use.  I like to use a blurry texture that blends well.  Use this code:

for (loop=0; loop<MAX_PARTICLES; loop++) // Loop Through All The Particles
{

  float x=particle[loop].x; // Grab Our Particle X Position
  float y=particle[loop].y; // Grab Our Particle Y Position
  float z=particle[loop].z; // Grab Our Particle Z Position

  // Draw The Particle Using Our RGB Values, Fade The Particle Based On It's Life
  glColor4f(.5f,.5f,1.f,particle[loop].life);

  glBegin(GL_TRIANGLE_STRIP); // Build Quad From A Triangle Strip
  glTexCoord2f(1,1); glVertex3f(x+0.2f,y+0.2f,z); // Top Right
  glTexCoord2f(0,1); glVertex3f(x-0.2f,y+0.2f,z); // Bottom Right
  glTexCoord2f(1,0); glVertex3f(x+0.2f,y-0.2f,z); // Top Left
  glTexCoord2f(0,0); glVertex3f(x-0.2f,y-0.2f,z); // Bottom Left
  glEnd(); // Done Building Triangle Strip

  particle[loop].x+=particle[loop].xi/250;  // Move On The X Axis By X Speed
  particle[loop].y+=particle[loop].yi/250;  // Move On The Y Axis By Y Speed
  particle[loop].z+=particle[loop].zi/250;  // Move On The Z Axis By Z Speed

// Slow down the particles
  particle[loop].xi*=.975;  
  particle[loop].yi*=.975;
  particle[loop].zi*=.975;

  particle[loop].life-=particle[loop].fade; // Reduce Particles Life By 'Fade'

  if (particle[loop].life<0.05f) // If Particle Is Burned Out
  {
    particle[loop].life=1.0f; // Give It New Life
    particle[loop].fade=float(rand()%100)/7500 + 0.0075f; // Random Fade Value
    particle[loop].x= 0; // Center On X Axis
    particle[loop].y= 0; // Center On Y Axis
    particle[loop].z= 0; // Center On Z Axis
    V = (float((rand()%9))+1);
    Angle = float(rand()%360);

    particle[loop].xi = sin(Angle) * V;
    particle[loop].yi = cos(Angle) * V;
    particle[loop].zi = ((rand()%10)-5)/5;
  } 
}

    That's pretty much it.  I know that you'll probably have questions even after looking at this.  So I'm giving you a little example program so you can experiment with the engine.  Download it here.  I hope this helps you out. =) 

Hit Counter

Hit Counter

This page was last updated 04/19/07