(For some reason the screen recording software I used has made it look like there are framerate issues, there aren’t!)
Last week I submitted and demonstrated my coursework for module 08214 – 3D Graphics and Simulation. You may have seen a very early version of my coursework in my previous post, but here I will explain what the coursework involved and how I achieved it.
The coursework brief was to make a tech demo in OpenGL 3.0 or above — showcasing lighting, 3D collision detection, texturing and our understanding of shaders and the OpenGL Pipeline to make an efficient simulation.
The tech demo had to include a column which was made up of 4 different boxes, optionally each with their own texture. In each cube was a different element of the simulation. In the top cube there were 3 “Emitters”, displayed as boxes made out of lava which emit balls made out of Gold, Aluminium or Copper at random intervals.
These balls, using the Fourth-Order Runge Kutta method, have the effects of gravity applied to them and fall into the cubes below, the first of which contains 4 Axis-aligned cylinders. Axis-aligned just means that one of the sides is in alignment with the plane in which it is on, for example the cylinders which go from the left to the right of the column are X-Axis aligned. The cylinders that go from the front to the back are Z-axis aligned. The balls collide with the cylinders and react in a semi-realistic way, bouncing off and seeing the effects of entropy on their acceleration.
As the balls move steadily down they enter the third cube which contains 2 non-axis aligned cylinders. These cylinders have no sides in alignment with any plane, this makes collision detection more challenging.
In the fourth and final cube there is a large pulsating sphere, known affectionately as the “Sphere of Doom”. If a ball collides with the sphere of doom it is slowly shrunk, losing mass and size, until it no longer exists or until it comes out the other side. However, all balls are disposed of if they hit the bottom of the column.
As well as colliding with the column itself, the obstructions within it and the sphere of doom the balls can collide against each other, when they do I work out their mass from their volume (which is randomized at emission time) and their density, which is based on their metal type. The mass is then used in the calculation to see where each ball should go.
As you can see from the video at the top of the blog post I also implemented special cameras which take you on a tour through the simulation, as well as both ambient and directional lighting with specular, diffuse and material-based effects added.
When I demonstrated this piece of work to my lecturer I received a grade of 90%, and as the module mark is 100% based off of this coursework that means that, subject to acceptance of marks from the exam board, I have achieved 90% in this module. I’m over the moon.