During my second year, I took a module called 3D Graphics and Simulation. This module covered two main areas, GLSL shader programming and OpenTK. Following a few weeks of introductions, we were given our coursework which was to create a simulation of “Balls” falling through a column. This column would include a number of different obstacles that would required different techniques for detecting and calculating the response when a ball came into contact with them.
The Final Outcome: –
The projects main focus was simulation, but there was also a focus on graphics. All the shaders for the above program were done by myself, using the Vertex and Fragment shaders. The key effects to note are: Texturing; a combination of multiple light sources with various colours; Ambient, Diffused, Specular And Shininess material properties as well as Attenuation.
Above is an snippet of code from my fragment shader for textured objects. It demonstrates the process of calculating the GL_FragColour of each of the lights and combines them together to get the overall effect.
As I mentioned before the project presented a number of different collision types. One of these was Line Collisions, that occurred between a sphere and a cylinder. Below is my Line Collision method within my physics manager class.
This method is called when a “Sphere” is within the proximity of a “Cylinder”. It takes in the position of the sphere, the origin position of the cylinder as well as the other end of the cylinder. From this it calculates the distance/ length of the cylinder, and using vector maths is able to calculate the distance between the cylinder and the sphere. If this distance is less than sum of the radius of the sphere and the radius of the cylinder, then a collision has occurred. During this collision detection, the vector for the direction of the collision is stored. This is then normalized to get the pure direction and a velocity is applied to the sphere relative to the restitutionCoefficient .
There is a lot more I can show in regard to this project. But its sheer size makes it difficult to do justice. The module was amazing, and was a great learning experience. Reflecting on the skills I learned a year on makes me appreciate them even more, and even whilst working on projects outside of this space, I find the knowledge and coding experience I gained helps me no end. I have used and continue to use the simulation maths and techniques throughout my work and frequently worked in this space during my industry year. This year I am doing a module called “Advanced Graphics and Games Programming” this won’t touch on the simulation side of things, but will focus on shader code taking it much further than in this project.
I am in my fourth year of education at the University of Hull, enrolled on the Computer Science with Games Development (with Industrial Experience) course. I have an avid interest in programming, and have various levels of experience across a wide range of languages. Most notably C based languages; C# and C++. In addition to my interest in programming in general, I particularly favour graphical programming as well as in engine development. My primary engine experience is within Unreal Engine 4 versions 4.07-4.17, with experience in both C++ and Blueprints. My experience includes: a full year industrial experience working on, among other things, a multi-user mixed medium – PC and VR, training simulation solution for the fire service; an ongoing final year project creating a “Multi-agent Self-managing town simulation” as well as numerous independent projects.