

The polygon object is useful for creating rectangles, squares and other planar shapes with more than
three edges. Their syntax is:
POLYGON:
polygon
{
Number_Of_Points, <Point_1> <Point_2>... <Point_n>
[OBJECT_MODIFIER...]
}
The float Number_Of_Points tells how many points are used to define the polygon. The points
<Point_1> through <Point_n> describe the polygon or polygons. A polygon
can contain any number of subpolygons, either overlapping or not. In places where an even number of polygons overlaps
a hole appears. When you repeat the first point of a subpolygon, it closes it and starts a new subpolygon's point
sequence. This means that all points of a subpolygon are different.
If the last subpolygon is not closed a warning is issued and the program automatically closes the polygon. This is
useful because polygons imported from other programs may not be closed, i.e. their first and last point are not the
same.
All points of a polygon are threedimensional vectors that have to lay on the same plane. If this is not the case
an error occurs. It is common to use twodimensional vectors to describe the polygon. POVRay assumes that the z value
is zero in this case.
A square polygon that matches the default planar image map is simply:
polygon {
4,
<0, 0>, <0, 1>, <1, 1>, <1, 0>
texture {
finish { ambient 1 diffuse 0 }
pigment { image_map { gif "test.gif" } }
}
//scale and rotate as needed here
}
The subpolygon feature can be used to generate complex shapes like the letter "P", where a hole is cut
into another polygon:
#declare P = polygon {
12,
<0, 0>, <0, 6>, <4, 6>, <4, 3>, <1, 3>, <1,0>, <0, 0>,
<1, 4>, <1, 5>, <3, 5>, <3, 4>, <1, 4>
}
The first subpolygon (on the first line) describes the outer shape of the letter "P". The second
subpolygon (on the second line) describes the rectangular hole that is cut in the top of the letter "P".
Both rectangles are closed, i.e. their first and last points are the same.
The feature of cutting holes into a polygon is based on the polygon inside/outside test used. A point is considered
to be inside a polygon if a straight line drawn from this point in an arbitrary direction crosses an odd number of
edges (this is known as Jordan's curve theorem).
Another very complex example showing one large triangle with three small holes and three separate, small triangles
is given below:
polygon {
28,
<0, 0> <1, 0> <0, 1> <0, 0> // large outer triangle
<.3, .7> <.4, .7> <.3, .8> <.3, .7> // small outer triangle #1
<.5, .5> <.6, .5> <.5, .6> <.5, .5> // small outer triangle #2
<.7, .3> <.8, .3> <.7, .4> <.7, .3> // small outer triangle #3
<.5, .2> <.6, .2> <.5, .3> <.5, .2> // inner triangle #1
<.2, .5> <.3, .5> <.2, .6> <.2, .5> // inner triangle #2
<.1, .1> <.2, .1> <.1, .2> <.1, .1> // inner triangle #3
}

