Up until this point, we have dealt with very simple representations of particles. We do not have to limit ourselves to simple points, however. In OpenGL, points can be texture mapped and lit, providing ways to achieve more particle effects. It may also make sense to consider using small textured quads instead of points to represent particles for some systems. The quads can be textured with a texture map containing alpha values to describe its shape, transparency and color. Using more complex particles may allow you to use less particles to achieve the same visual effect, enhancing performance.
One problem with using quads or other surface primitives is that, unless you want to expose their planar nature, you will have to billboard them. Billboarding is rotating each quad so that it always faces the viewer. Since you control the orientation of the particles, this only becomes a problem when the viewing transformation changes. See Section 6.10 in these notes.
Some implementations have a billboarding extension, called GL_sprite, which will orient surfaces automatically. Implementation performance may vary, and since surfaces can all be oriented together, it may still be faster to billboard the surfaces yourself. Benchmark to be sure.