[2015 - current] Browser Extension
Control YouTube videos from any tab with this browser extension, while browsing the web. I created this because I often listen to YouTube videos at work while working - but don't need to watch the video. When I need to concentrate or talk, it's annoying to have to switch to the tab and also I don't want to appear like I'm always watching movies at work. Try it out if you commonly listen to music or talks in the background while working.
 Honours Thesis
My honours thesis, shown below, was published at SAICSIT 2011 and can be found in the ACM Digital Library, or downloaded below. DOI: 10.1145/2072221.2072231
Apart from SDL, OpenGL and standard C++ libraries, everything was developed from scratch in C++ and GLSL. We built small engine around OpenGL with a small math library as a foundation.
This project involved the creation of a terrain that supported real-time deformations. It targetted PCs with last-generation, Shader Model 4, graphics cards such as the NVIDIA GeForce 9x and 200 series cards. Two levels of detail were provided for deformation. The representation of the coarser level was done in the vertex shader. For the fine-level details (approx 3cm scale), two approaches were investigated: texture-based detail using parallax mapping and geometry generation using the geometry shader. I worked with Justin Crause on these two high-detail approaches, as well as the caching scheme used to swap displacement maps to and from the hard-disk. See the project website for more details and images/videos. My final report can be downloaded here.
 Part 1: Linux
This tutorial runs through the process of setting up a linux box (Ubuntu) for OpenGL 3.2 development. At the time OpenGL 3.2 was new and setup was non-trivial. It shows where and how to acquire the necessary SDL and OpenGL packages. Finally I demonstrate, and explainly briefly, how to program a simple OpenGL application using this API, producing a red quad as a result.
The source for the tutorial can be downloaded here or on .
 Part 2: Windows
This second part of the tutorial runs through the process of setting up a Windows machine and Microsoft Visual Studios.
 Release your anger... (Previously hosted at http://www.angrytortoise.com)
 a blobby mess of colour..
When I discovered metaballs I decided they'd make a pretty nice looking screensaver. Because of the per-pixel computation I thought that a fragment shader should handle it nicely and so made this baby in OpenGL. You can download the screensaver here.
 Solitons of the Korteweg-de Vries Equation...
This was one of our simulation projects for Applied Maths in third year. Usually we
would program using Matlab and wait hours for the final 3D plot. I decided to use CUDA
instead, expecting faster results. Choosing CUDA was a good idea as it could perform
the simulation in real-time. The exact equation is
 squishy balloon thing..
This was my first dynamic displacement map. I modelled it using the Wave Equation. It uses OpenGL FBO and Fragment Shaders to update the displacement map each timestep. Rendering is done every few timesteps and I used a Blinn reflectance model.
 Rope, Cloth and Rigid Bodies..
After reading Thomas Jakobsen's paper on Advanced Character Physics which speaks of the use of constraints and relaxation techniques, I implemented my own rope and cloth systems. I then also tried a basic rigid body system, seen below.
 An interactive web application for practising Japanese
This is a website targetting beginner Japanese Language students to help them practise Hiragana and
Check out the project
When I began learning the Japanese Language, I needed some way to practise the kana characters that I was
learning. I always find that repetitive drilling of new things helps my brain learn faster so I
made a basic web app to help me practise. I then thought it may be cool to evolve it into something better
online that others could use. This website uses HTML5 and CSS3 features such as the new
canvas elements and CSS transitions to provide the user with a visually
stimulating and interactive interface for testing their knowledge of Hiragana and
Katakana characters thoroughly. Words of the Japanese language can be expressed using our alphabet in a form
or 日本語 (the hiragana and kanji spelling of
Japanese - the language) can be phonetically romanized as Nihongo. Many books and online sites use
rōmaji in the learning process, whereas I chose to avoid it as I thought it would cause unncessary
associations in the brain rather than directly correlating sounds with characters as we did with our own
alphabet as children.