1.3.3.2 Height Field Object
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!
|