I found this (http://www.flipcode.com/voxtut/) example of terrain rendering algorithm based on voxel technology and converted it to "full 3d" renderer. I mean, that in heightmap there is only one z(up) coordinate for a pair (x,y) and in "real 3d" there are many.
I have done this by adding new "z" layer to ordinary x,y map. In example, I have a dataset:
data[x][y][0] = 0;
data[x][y][1] = 10;
data[x][y][2] = 50;
data[x][y][3] = 100;
data[x][y][4] = -1;
That means, what there are visible voxels with coordinates x,y,z where 0<=z<=10 or 50<=z<=100. So I draw this dataset in similar they as it is described on flipcode.
This is my program (pretty slow), and this is final rendering.
I have some problems with this approach.
In this algorithm objects is drawn by long stripes which are parallel to the screen (because we travel through screen by adding 1 to horizontal screen coordinate and constant dd to distance between the camera and a point on the ray). Where we have spaces between drawable objects, there are these ugly zigzags too. Can I easily draw objects with something else (cubes, in example) instead of these stripes? Or maybe there is another way to make better quality?
Since a ray does not draw a column on the screen (it draws vertical line segments instead), it is difficult to determine which pixels on screen are already drawn and which are not. Is there anything to do with it?
Is there any paper on this topic or any ready algorithm described?