Smoke is characterized by many small particles that float away from the source, and spread out as they move through the air. We can simulate the floatation effect with particles by using a small upwards acceleration (or constant velocity), but simulating the diffusion of each small smoke particle would be too expensive. Instead, we can simulate the diffusion of many small particles by making our simulated particles change their size (grow) over time.
The following image shows an example of the results:
The texture for each particle is a very light "smudge" of grey or black color.
To make the particles grow over time, we'll make use of the
GL_PROGRAM_POINT_SIZE functionality in OpenGL, which allows us to modify the point size within the vertex shader.
Alternatively, we could draw quads, or use the geometry shader to generate the quads using the technique demonstrated in Chapter 6, Using Geometry and Tessellation Shaders.