This is my coursework project for a second year module, ‘3D Graphics and Simulation’ at the University of Hull. I received a mark of 87%, a good 1st class. It was developed in C# OpenGL 3.1 using shaders.
‘The Column’ is a set of boxes stacked one on top of each other. The first level at the top contains three emitters on three sides of the box. They emit balls of random sizes, positions and frequency. The second level contains four axis-aligned cylinders, two on the Z axis and two on the X axis. The third level contains two cylinders that are not axis aligned. The balls can collide and respond to the cylinders.
On the fourth level is a large ball called the ‘Sphere of Doom’. If a ball collides with it, it loses its momentum and size over time. The whole ball can be absorbed by the Sphere of Doom or it can pass off it with some size removed. When a ball reaches the bottom it is destroyed.
How I have simulated a dynamic system
The ball emitter system appears to be quite randomised. I use the delta time between updates to count down until a new ball is emitted. Delta time is always slightly different on each update and the number it counts down from is decided using the ‘Random’ type in C#. Having random balls being created means it makes it very difficult to predict when and where balls will collide in the column.
Balls also have mass and density. This means when balls collide they will act differently depending on their mass. Balls with higher mass will not move as far away as balls with lower mass when they collide.
Emitters at the top of the column
Balls colliding and bouncing off cylinders
Balls colliding with the Sphere of Doom and showing particle effects
An early, in-development version of The Column