Adventures in 3D programming