|
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:
Note: Windows users, unless you specify +FT
as above,
you will get a .BMP file (which is the default Windows version output).
In this case you will need to use sys
instead of
tga
in the height_field
statement below.
#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.
Wow! The Himalayas have come to our computer screen!
|