I am a C++ programmer with a background in graphics programming as well as additional interests in game programming and physics simulation. Here are some projects which I have previously worked on both during my university studies and in my spare time.
Feel free to contact me by email at email@example.com.
8-Ball Pool Physics Demo
To better understand game physics in my previous projects, I studied through the book "Introduction to Game Physics With Box2D" by Ian Parberry. I wrote this demo based on some of the example code, which is given in plain C++ and before any external libraries are introduced.
Unlike the original, which only contains the the cue ball and 8-ball, my version begins with a full set of balls. This required writing more robust collision resolution to handle the greater number of objects. It has been written from scratch in C++ and SDL2.
2012 - 2013
Platform Game / Breakout Game
I wrote a simple platform game to learn the basics of game development. It aims to be relatively simple in scope, while maintaining the essential components.
The component-based entity system and data-oriented design proved to be flexible enough to create a Breakout clone very rapidly, with changes to only the level format and the creation of new components and entities.
- Variable timestep rendering with fixed game tick rate.
- Automatic memory management of Game Objects.
- Component based entity system.
- Data driven design, using text files for entities and XML for levels (in TMX format).
- New objects and enemies can be added simply by editing files, without recompiling.
- Unlimited number of parallax scrolling backgrounds.
It was written in C++ (with boost) and SDL 1.2 (later upgraded to SDL 2) using Visual Studio on Windows 7 and Xcode on Mac OS X
2011 - 2012
Modern OpenGL Renderer and Model Viewer
I wrote this renderer using only the core profile introduced in OpenGL 3.3 to familiarise myself with the changes to the specification. I also wanted to create a framework application for loading meshes and shaders to help with experimentation in the future.
- Exclusive use of OpenGL 3.3 core profile.
- Ability to load Wavefront OBJ meshes as well as converting them to compact binary files for efficient loading.
- Exponential shadow maps for soft shadows filtered by hardware.
- Tangent-space normal mapping.
- Fallback for compressed texture files on unsupported hardware, using the Squish library.
- In-memory y-flipping of compressed textures from Direct3D co-ordinates to OpenGL, which keeps shader code simple and flexible.
MSc Thesis: Efficient Rendering of Human Skin
For my MSc thesis, titled “Efficient Rendering of Human Skin”, I modelled the subsurface light transport in human skin while achieving real-time performance. It was based on the real-time skin shader by Eugene d'Eon combined with melanin and haemoglobin maps to determine a realistic skin tone. It was written using OpenGL, GLSL, C++ and Qt4.
BSc Dissertation: C++ Ray Tracer
My dissertation in the final year of my computer science degree was the implementation of a simple ray tracer. It supports reflection, refraction, spotlights, point-lights, area-lights for soft shadows (using monte carlo methods), 4xAA, texture mapping (with bilinear filtering) and a skybox using cube map textures. It was written using C++ and Qt4.