Creating a particle system using instanced particles
To give more geometric detail to each particle in a particle system, we can make use of OpenGL's support for instanced rendering
. Instanced rendering is a convenient and efficient way to draw several copies of a particular object. OpenGL provides support for instanced rendering through the functions glDrawArraysInstanced
and glDrawElementsInstanced
.
In this example, we'll modify the particle system introduced in the previous recipes. Rather than using point sprites, we'll render a more complex object in the place of each particle. The following image shows an example where each particle is rendered as a shaded torus:
Using instanced rendering is simply a matter of calling one of the instanced draw functions, and providing the number of instances to draw. However, there is some subtlety to the way that we provide vertex attributes to the shader. If all particles were drawn with exactly the same attributes, it would be simple to draw, but...