Hello!

Welcome to my space on the web. Here you can find various things related
to my interests including my research publications, software I have developed,
and some of the photographs I have taken.

Software

Most of my spare time is spent programming. I got started about 15 years ago and have written a lot of software in the areas of 3D graphics and game programming, as well as doing projects related to my research.

I mostly program in C++ and release things as open source when it's practical to do so. Programming is always a learning experience so be aware that some of my older projects may not have the same code quality as my newer ones. They are here largely for reasons of historical interest.


Voxel Game Engine (2006 - Present day)

About: I've been fascinated by the potential of voxels in games since I did my PhD in medical visualisation and saw how easy it was to manipulate data stored in this format. I've therefore been working on the open source PolyVox library since 2006, and have been building the commercial Cubiquity engine on top of it since 2012.

PolyVox is a low-level C++ library which handles tasks such as storing volume data in an efficient way and also performing surface extraction to create meshes for rendering. Cubiquity is a higher-level engine which manages the mesh data and provides integration of PolyVox into other game engines.

More details: Voxel technology at Volumes of Fun


Voxeliens (2011 - 2012)

About: Voxeliens is a 3D voxel-based version of the classic Space Invaders game. I was the main developer of this game, which was written as the first title from the indepedant games studio 'Volumes of Fun' which I cofounded with my brother.

Voxeliens served as a test for the PolyVox voxel engine mentioned above, and also used a number of other technologies including the Qt toolkit and the Ogre3D rendering engine. I did most of the art and soud effects as well as the programming, though the music was from a third party.

Overall it was a great experience, and won us some free floor space at the Develop conference through their 'Indie Showcase' program.

More details: Voxeliens homepage


Voxel Studio (2005 - 2007)

About: I undertook this project as part of my PhD on medical visualization. During this time I worked at Biotronics3D Ltd on their medical imaging software, but in order to better understand the underlying principles I wrote my own software too. This also allowed me to experiment with ideas which didn't easily fit into the commercial package.

  • Flexible template-based code
  • Use of octree for efficient processing and rendering.
  • Built on Qt, Boost, and SCons.
  • Slice renderer, Maximum Intensity Projection, and Shaded Surface Display

Download: Click here


Motion Detector (2005)

About: This was a project I began after I got my first WebCam, basically to get some Java experience and play with my new toy. It's a motion detector which allows the user to specify parameters such as 'maximum motion' and 'noise threshold' and then graphs the amount of motion against time.

As I wrote it a while ago I can't remember the exact approach it used. It basically used averaging across several frames to reduce the amount of noise present and then counted the number of pixels which changed by more than a certain threshold. Nothing fancy - the idea was to make it plugin based to allow new motion detection algorithms to be written but I never got around to it.

The output graph was a Java custom component which scrolled across as time passed. Green represents a low degree of motion, and red represents a high degree of motion

Download: Click here


Quantum Computer Simulator (2004)

About: This is the result of my MSc at Warwick University - a compiler for a quantum programming language and a simulator to run the resulting bytecode. It's written in C++ though was ported from Java and no is not a good example of my C++ skills (no memory management, for example, and strange design). It worked as a proof of concept though.

The language it compiles it Peter Selinger's Quantum Programming Language (QPL). It generates bytecode instructions corresponding to low-level quantum gates and has been used to implement Deutsch's Algorithm, among others.

For further details, please see the information on my Quantum computing research under the 'Research' heading at the top of this page

Download: Click here


3D Graphics API (2003)

About: I implemented this 3D graphics API as my final year project at university. The idea was to design an implement an object oriented API with a subset of the features typically found in OpenGL or Direct3D.

I implemented a cube rendering demo and equivalent program using the Mesa OpenGL software renderer. Mine ran at about half the speed, which wasn't too bad considering I didn't optimise at all.

  • Scanline rendering of arbitrary convex polygons.
  • A per vertex lighting model with interpolation of the resulting colours across the polygon.
  • UV texture mapping of full colour images.
  • Backface culling through the dot product.
  • Depth buffering for hidden surface removal.

Download: Click here


3D Game Engine (2001 - 2003)

About: This 3D engine was a project I undertook over a couple of years, mostly while at university. The aim was to produce a game engine similar in concept to 'Quake' from id software. Along with the engine I created some tools to assist with content creation. I produced quite a lot over the couple of years but perhaps failed to realise quite what a massive task a 3D engine was, and I was quite a long way from completing my goals.

  • Binary Space Partition (BSP) tree used for depth sorting.
  • Potentially Visible Set (PVS) used to perform visibility calculations.
  • Quake style console for loading and interacting with maps.
  • Map compiler which performs Constructive Solid Geometry (CSG) on objects to generate valid geometry.
  • Developed a simple map editor.

Download: Click here