A height_field
is an object that has a surface that is determined by the color value or palette index number of an image designed for that purpose. With height fields, realistic mountains and other types of terrain can easily be made. First, we need an image from which to create the height field. It just so happens that POV-Ray is ideal for creating such an image.
We make a new file called image.pov
and edit it to contain the following:
#include "colors.inc" global_settings { assumed_gamma 2.2 hf_gray_16 }
The hf_gray_16
keyword causes the output to be in a special 16 bit grayscale that is perfect for generating height fields. The normal 8 bit output will lead to less smooth surfaces.
Now we create a camera positioned so that it points directly down the z-axis at the origin.
camera { location <0, 0, -10> look_at 0 }
We then create a plane positioned like a wall at z=0. This plane will completely fill the screen. It will be colored with white and gray wrinkles.
plane { z, 10 pigment { wrinkles color_map { [0 0.3*White] [1 White] } } }
Finally, create a light source.
light_source { <0, 20, -100> color White }
We render this scene at 640x480 +A0.1
+FT
. We will get an image that will produce an excellent height field. We create a new file called hfdemo.pov
and edit it as follows:
#include "colors.inc"
We add a camera that is two units above the origin and ten units back ...
camera{ location <0, 2, -10> look_at 0 angle 30 }
... and a light source.
light_source{ <1000,1000,-1000> White }
Now we add the height field. In the following syntax, a Targa image file is specified, the height field is smoothed, it is given a simple white pigment, it is translated to center it around the origin and it is scaled so that it resembles mountains and fills the screen.
height_field { tga "image.tga" smooth pigment { White } translate <-.5, -.5, -.5> scale <17, 1.75, 17> }
We save the file and render it at 320x240 -A
. Later, when we are satisfied that the height field is the way we want it, we render it at a higher resolution with anti-aliasing.
A height field created completely with POV-Ray.
Wow! The Himalayas have come to our computer screen!