Next Generation Terrain rendering
Volumes instead of Heightfields

Here are some screenshots, which show the project I'm currently working on. It's a first preview of a Landscape Engine with Hierarchical Voxel Spacing.  

The main idea is to put voxel boxes of different sizes around the observer; all with same resolution, but different scale. From this Voxelvolumes is then a triangle-mesh generated, to render the scene hardware accelerated. So, here on the images, the volumes are all 64x64x64 voxels. The Landscpape in each of the upper Images consists of 5 of this boxes with scale factors 1,2,4,8 and 16 ; so the size of the displayed Volume is (64*16)^3 = 1024x1024x1024. If the visitor moves, the inner (smallest) Box has to be updated most often, the higher sized ones only if necessary.
It is possible/necessary to update the voxelvolumes while runtime; the update is too slow for animations, but fast enough to walk through fractal landscapes with infinite size without any preprocessing.
The landscapes may consist e.g. of thousands of boxes and spheres which are added/subtracted from the voxelvolume. Updating of the voxelboxes has therefore to be done in an extra thread. Another advantage of this design is that almost all data, of the voxel-volumes and the geometry, can be reused, if a box needs to be recalculated. The current implementation is a little bit slow, because it is not yet optimized for speed.
Currently all triangle-data is just stored in vertex-arrays, but because the farer triangles are only updated rarely, they could be stored in the graphic-card memory as displaylists. e.g.

The calculation for transforming the voxels in polygons is done very simple, so no marching cubes was necessary for this. Afterwards, the mesh is smoothed several times to remove the Lego-Look, and connected Triangles are searched to generate Strips for faster rendering.

All Screenshots were taken on an AMD 1500+,GF4 4400, Linux/Debian
The program self is written in C++ and uses OpenGL as HAL.

[ little presentation to explain about the theory ]

[ more screenshots here ]

[ screenshot mirror: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]


A Voxel based 3D-Engine,coded in 1996 by
me; Soundblaster & Network support done by Chris. For further details check out the .DOC ; especially the Bugs section.
The Engine was coded in Assembler and Pascal; the Source is included . If you get a 
RUNTIME ERROR 200, try this little Patch.
Technical Information :

The Engine uses Z-Maps to render the heights for each pixel. This allows the Program to calculate animated Water in Realtime.
For new sound, the MUSIC.WAV - File can be replaced by another 2MB - 22khz - Audio File.
The Engine runs in Protected-Realmode ( switches in Protected mode - set 4GB Segment Descriptors and goes back to Realmode; then the 4GB could be accessed from Realmode ) ,
so no Memory-Manager should be present , when the Program is started . ( so Win95 should choose the safe-command-Prompt - Option at startup )
Win32 - Version of 3DED



3DED for WIN32

This Editor supports:

  • Glide & GL support
  • Environment-Mapping 
  • Lightening
  • LOD Surfaces
  • Quadtree Landscape
  • Animated Objects
  • T&L ( GL only  )


DOS - Version of 3DED

3D-ED for DOS

This Version is available with full Pascal and Assembler Source Code. It runs under DOS with HIMEM, but not EMM or QEMM. With this Editor, you can create 3D-Objects, by creating Polygon Strips for every Z-Map, which will be connected by the Editor.

Done in 97 by me

3D-Jump'n Run

This Game Editor is a Sample for a 3D- Jump'n Run Game ( The Source includes the Editor and a Subroutine to show the Scene  ) . The Texture routines are written in ASSEMBLER and  linked in the Pascal code . It can be contolled by Mouse and Keyboard. The Engine is very simple ( the Scene could not be rotated ) but very fast ( The Texturefunctions are written in Assembler ).
It was done in 1995 by me.


These Engines demonstrates, what coud be done, with alround 1K-Sourcecode. They use the Pulsar - technic to render the Scene. It is steered by mouse and was codedby me  in Pascal . If you have Problems with the Runtime-200 Error, try this Fix. ( Happens above 266 Mhz )
( 1998 )