C# port of the code from a series of OpenGL articles on tomdalling.com http://tomdalling.com/