Final Year Project: Real-time Terrain Generation for Games

This project was developed in my final year of University as part of my course using C++ and DirectX. It included the development of a basic engine capable of generating terrain procedurally and rendering it in real-time. The GUI is implemented using AntTweakBar and used to modify the terrain generation parameters. I implemented a continuous level of detail algorithm using DirectX 11 tessellation to improve performance. The LOD algorithm runs entirely on the GPU, passing the height map over to the GPU once rather than clogging up the bus by sending the optimised mesh every frame. This project also attempted to analyse the generated terrain and determine its suitability for games, I compiled various techniques that could be used to provide accurate ‘metadata’ to identify a terrain’s playability, interestingness etc.

I’m already in the process of improving this project (currently working on water) and I’ll update this entry as appropriate.


  • Psuedo-random terrain generation using Ken Perlin’s noise algorithm
  • Generation parameters customisable using GUI provided by AntTweakBar
  • Gradient-based texturing
  • Fog and basic lighting
  • Continuous level of detail using DirextX11 tessellation

XNA Tetris clone

This was just a little side project I completed in my spare time. I did everything from scratch including the graphics (which considering how bad I am at art, is quite an achievement). The ‘tetrominoes’ are defined using a data structure that controls both its shape and rotation. When a block ‘lands’ it updates the game board; a 2D array of cell states that determine whether a block is present, and if so, its colour.

I developed it in XNA using C# in about 2-3 days. It was a really simple project, and not terribly challenging, but it’s a finished game that looks fairly polished and I may consider adding some fancy effects or gravity later on if I have time.


  • Basic menu system, with Main Menu, Pause and Game Over screens
  • Increasing difficulty level