GPU Particle Simulations

For our final graphics project, Jayme Woogerd and I implemented a configurable particle system in C using OpenGL buffer objects, instancing, and GLSL shaders.

We started by using fixed-pipeline OpenGL, rendering each particle as a point. Most of the parameters are configurable, including the number of particles generated, the randomness spread, camera direction, and location of particle generation, and the physical forces.

We then added vertex buffer objects and instancing. Instancing allows us to define a single two-dimensional template billboard, shared by all particles. This 2-dimensional image is rotated to always face the camera - giving the illusion that the particles are 3-dimensional, while keeping the rendering fast.

Attributes that are unique to a given particle (such as size, color, position and age) are stored and sent to the GPU via buffer objects.

Finally, we used the GL shader language to implement different texture maps and animations.

Louis Rassaby

Louis Rassaby

I’m a Brooklyn-based software engineer and entrepreneur. I’m the founder of Wirefreight, a customer-service SaaS platform for logistics. Previously, I led the new products engineering team at Phosphorus Genomics, analyzing genetic data and educating tens of thousands of people on their risks of developing or passing on genetic diseases.

Away from the keyboard, I make food and music. I’m half of a band called Cellolele and I once played in an ad for Versace.