Here is a list of projects of mine from a few years ago. Since work has kept me quite busy on services and internal tools I haven't worked on much outside. So most of these are outdated, but I'll still share them.

OpenGL 3.2 Basic Tutorial

[2010] 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 GitHub.

OpenGL 3.2 Basic Tutorial

[2010] Part 2: Windows

This second part of the tutorial runs through the process of setting up a Windows machine and Microsoft Visual Studios.

A Framework for Deformable Terrain on the GPU

[2010] 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. You can find the source on GitHub.

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.

Multi-Tab Video Controller for YouTube

[2015] A Chrome Extension

This Chrome Extension provides controls for playing/pausing YouTube videos in other tabs 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. So this allows one to quickly Play or Pause, or rewind by 15 seconds.

screenshot of the controller popup in the browser

Angry Tortoise

[2011] Release your anger...

I built this website with a friend of mine. He designed the layout and prototyped it with photoshop. I then coded it in PHP, HTML5 and pure Javascript. It was a fun project meant to just allow people to express themselves publicly and anonymously along with others.



[2009] 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.

KdV Simulation

[2009] 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
Kdv1 eqn

Wavey Torus

[2010] 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.

Constraint-Based Physics Simulations

[2010] 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 tried implementing my own rope and cloth systems. I then also tried a basic rigid body system.

Nihongo Drills

[2012] An interactive web application for practising Japanese

This is a website targetting beginner Japanese Language students to help them practise Hiragana and Katakana. It is built in PHP, HTML5 and pure Javascript.
Check out the GitHub project

screenshot of nihongo drills web application

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 audio and 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 known as rōmaji. For example にほんご 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.