I'd like to share my progress with the voxel renderer that I
started in SilverCreator two years ago and then ported to .NET and Mono. I've expanded the basic height map rendering algorithm with the ability to render arbitrary 3d scenes built with voxels.
A voxel is a 3d pixel. Voxel renders therefore do not render polygons built out of triangles like most 3d renderers, but instead render lots of little cubes. Games like Minecraft use a voxel data structure to store their world, but convert the world into polygons and render it conventionally. On the other hand, renderers like mine draw the voxels directly.
Voxels are interesting because they easily solve problems that are extremely complicated in polygon renderers such as modifying the environment at runtime and rendering fine details and rough surfaces. In my engine, it only takes a few lines of code to blast a shockwave from under the player that ripples the world dramatically. I think that a world built of voxels has the potential to feel much more dynamic and malleable than one built of polygons, which intrigues my artistic side.
Nightmare test land.
No graphics test is complete without shaded cubes.
The world is stored as a 2d array of linked lists of vertical voxel spans. I use raycasting to project spans of voxels to the screen one vertical scanline at a time with no overdraw. The major limitation of this technique is that the camera is restricted to four degrees of freedom: translation along the three axes and rotation around the vertical. I use a perspective distortion hack to achieve tilting and haven't yet implemented rolling. It is possible to achieve six degrees of mathematically correct freedom in a renderer like this, but in my opinion if it looks right, then it is.
The next step for this project is adding voxel-built models to the scene and transforming them. Then optimization. Then maybe a game.