### 3.4.2 Surface of Revolution Object

Bottles, vases and glasses make nice objects in ray-traced scenes. We want to create a golden cup using the surface of revolution object (SOR object).

We first start by thinking about the shape of the final object. It is quite difficult to come up with a set of points that describe a given curve without the help of a modeling program supporting POV-Ray's surface of revolution object. If such a program is available we should take advantage of it.

The point configuration of our cup object

We will use the point configuration shown in the figure above. There are eight points describing the curve that will be rotated about the y-axis to get our cup. The curve was calculated using the method described in the reference section (see "Surface of Revolution").

Now it is time to come up with a scene that uses the above SOR object. We edit a file called `sordemo.pov` and enter the following text.

      #include "colors.inc"
      #include "golds.inc"
      global_settings { assumed_gamma 2.2 }
      camera {
        location <10, 15, -20>
        look_at <0, 5, 0>
        angle 45
      }
      background { color rgb<0.2, 0.4, 0.8>  }
      light_source { <100, 100, -100> color rgb 1 }
      plane {
        y, 0
        pigment { checker color Red, color Green scale 10 }
      }
      sor {
        8,
        <0.0,  -0.5>,
        <3.0,   0.0>,
        <1.0,   0.2>,
        <0.5,   0.4>,
        <0.5,   4.0>,
        <1.0,   5.0>,
        <3.0,  10.0>,
        <4.0,  11.0>
        open
        texture { T_Gold_1B }
      }

The scene contains our cup object resting on a checkered plane. Tracing this scene results in the image below.

A surface of revolution object

The surface of revolution is described by starting with the number of points followed by the points. Points from second to last but one are listed with ascending heights. Each of them determines the radius of the curve for a given height. E. g. the first valid point (second listed) tells POV-Ray that at height 0.0 the radius is 3. We should take care that each point has a larger height than its predecessor. If this is not the case the program will abort with an error message. First and last point from the list are used to determine slope at begining and end of curve and can be defined for any height.