\subsection{Objects}
\index{objects}

\subsubsection{Spheres}
\index{objects!spheres}
  Spheres are the simplest object supported by \RAY\ and they are
also the fastest object to render.  Spheres are defined as one would expect,
with a {\bf CENTER}, {\bf RAD} (radius), and a texture.  The texture may
be defined along with the object as discussed earlier, or it may be declared
and assigned a name.  
Here's a sphere definition using a previously defined "NitrogenAtom" texture:
\begin{verbatim}
 SPHERE  CENTER 26.4 27.4 -2.4   RAD 1.0   NitrogenAtom 
\end{verbatim}
A sphere with an inline texture definition is declared like this:
\begin{verbatim}
 Sphere center 1.0 0.0 10.0   
           Rad 1.0
        Texture  Ambient 0.2  Diffuse 0.8  Specular 0.0  Opacity 1.0
                 Color   1.0 0.0 0.5
                 TexFunc 0
\end{verbatim}
Notice that in this example I used mixed case for the keywords, this is
allowable...
Review the section on textures if the texture definitions are confusing.

\subsubsection{Triangles}
\index{objects!triangles}
  Triangles are also fairly simple objects, constructed by listing the
three vertices of the triangle, and its texture.  The order of the
vertices isn't important, the triangle object is "double sided", so the
surface normal is always pointing back in the direction of the incident ray.
The triangle vertices are listed as {\bf V1}, {\bf V2}, and {\bf V3} each one
is an X, Y, Z coordinate.  An example of a triangle is shown below:
\begin{verbatim}
TRI
  V0  0.0 -4.0 12.0
  V1  4.0 -4.0 8.0
  V2 -4.0 -4.0 8.0
  TEXTURE
    AMBIENT  0.1 DIFFUSE  0.2 SPECULAR 0.7 OPACITY 1.0
    COLOR 1.0 1.0 1.0
    TEXFUNC 0
\end{verbatim}

\subsubsection{Smoothed Triangles}
\index{objects!smoothed triangles}
  Smoothed triangles are just like regular triangles, except that the  
  surface normal for each of the three vertexes is used to determine the
  surface normal across the triangle by linear interpolation.
  Smoothed triangles yield curved looking objects and have nice 
  reflections.  
\begin{verbatim}
STRI 
  V0 1.4   0.0   2.4  
  V1 1.35 -0.37  2.4   
  V2 1.36 -0.32  2.45 
  N0 -0.9 -0.0  -0.4  
  N1 -0.8  0.23 -0.4  
  N2 -0.9  0.27 -0.15 
  TEXTURE
    AMBIENT  0.1 DIFFUSE  0.2 SPECULAR 0.7 OPACITY 1.0
    COLOR 1.0 1.0 1.0
    TEXFUNC 0
\end{verbatim}

\subsubsection{Infinite Planes}
\index{objects!planes}
  Useful for things like desert floors, backgrounds, skies etc, the infinite
plane is pretty easy to use.  An infinite plane only consists of two pieces
of information, the {\bf CENTER} of the plane, and a {\bf NORMAL} to the plane.
The center of the plane is just any point on the plane such that the point 
combined with the surface normal define the equation for the plane.
As with triangles, planes are double sided.  Here is an example of an 
infinite plane:
\begin{verbatim}
PLANE
  CENTER 0.0 -5.0 0.0
  NORMAL 0.0  1.0 0.0
  TEXTURE
    AMBIENT  0.1 DIFFUSE  0.9 SPECULAR 0.0  OPACITY 1.0
    COLOR  1.0 1.0 1.0
    TEXFUNC  1
      CENTER 0.0 -5.0 0.0
      ROTATE 0. 0.0 0.0
      SCALE  1.0 1.0 1.0
\end{verbatim}

\subsubsection{Rings}
\index{objects!rings}
  Rings are a simple object, they are really a not-so-infinite plane.
Rings are simply an infinite plane cut into a washer shaped ring, infinitely
thing just like a plane.  A ring only requires two more pieces of information
than an infinite plane does, an inner and outer radius.  Here's an example
of a ring:
\begin{verbatim}   
  Ring
    Center 1.0 1.0 1.0
    Normal 0.0 1.0 0.0
    Inner  1.0
    Outer  5.0
    MyNewRedTexture
\end{verbatim}

\subsubsection{Infinite Cylinders}
\index{objects!infinite cylinders}
  Infinite cylinders are quite simple.  They are defined by a center, an 
axis, and a radius.  An example of an infinite cylinder is:
\begin{verbatim}
  Cylinder
    Center 0.0 0.0 0.0
    Axis   0.0 1.0 0.0
    Rad    1.0
    SomeRandomTexture
\end{verbatim}

\subsubsection{Finite Cylinders}
\index{objects!finite cylinders}
  Finite cylinders are almost the same as infinite ones, but the
  center and length of the axis determine the extents of the cylinder.  
  The finite cylinder is also really a shell, it doesn't have any
  caps.  If you need to close off the ends of the cylinder, use two
  ring objects, with the inner radius set to 0.0 and the normal set
  to be the axis of the cylinder.  Finite cylinders are built this
  way to enhance speed. 

\begin{verbatim}
  FCylinder
    Center 0.0 0.0 0.0
    Axis   0.0 9.0 0.0
    Rad    1.0
    SomeRandomTexture
\end{verbatim}
This defines a finite cylinder with radius 1.0, going from 0.0 0.0 0.0, to 
0.0 9.0 0.0 along the Y axis.  The main difference between an infinite cylinder
and a finite cylinder is in the interpretation of the {\bf AXIS} parameter.
In the case of the infinite cylinder, the length of the axis vector is 
ignored.  In the case of the finite cylinder, the axis parameter is used
to determine the length of the overall cylinder.

\subsubsection{Axis Aligned Boxes}
\index{objects!axis-aligned boxes}
  Axis aligned boxes are fast, but of limited usefulness.  As such, I'm
not going to waste much time explaining 'em.  An axis aligned box is
defined by a {\bf MIN} point, and a {\bf MAX} point.  The volume between
the min and max points is the box.  Here's a simple box:
\begin{verbatim}
  BOX
    MIN -1.0 -1.0 -1.0
    MAX  1.0  1.0  1.0
    Boxtexture1   
\end{verbatim}

\subsubsection{Fractal Landscapes}
\index{objects!fractal landscapes}
  Currently fractal landscapes are a built-in function.  In the near future
I'll allow the user to load an image map for use as a heightfield.
Fractal landscapes are currently forced to be axis aligned.  Any suggestion
on how to make them more appealing to users is welcome.  A fractal landscape
is defined by its "resolution" which is the number of grid points along
each axis, and by its scale and center.  The "scale" is how large the
landscape is along the X, and Y axes in world coordinates.  Here's a simple
landscape:  
\begin{verbatim}
SCAPE
  RES 30 30
  SCALE 80.0 80.0
  CENTER 0.0 -4.0 20.0
  TEXTURE
    AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0
    COLOR 1.0 1.0 1.0
    TEXFUNC 0
\end{verbatim}
The landscape shown above generates a square landscape made of 1,800 triangles.
When time permits, the heightfield code will be rewritten to be more 
general and to increase rendering speed.

\subsubsection{Arbitrary Quadric Surfaces}
\index{objects!arbitrary quadrics}
  Docs soon. I need to add these into the parser, must have forgotten
before ;-)   

\subsubsection{Volume Rendered Scalar Voxels}
\index{objects!grids of scalar voxels}
  These are a little trickier than the average object :-)
These are likely to change substantially in the very near future so I'm not
going to get too detailed yet.
A volume rendered data set is described by its axis aligned bounding box, and 
its resolution along each axis.  The final parameter is the voxel data 
file.  If you are seriously interested in messing with these, get hold of
me and I'll give you more info.  Here's a quick example:
\begin{verbatim}
SCALARVOL
  MIN -1.0 -1.0 -0.4
  MAX  1.0  1.0  0.4
  DIM 256 256 100
  FILE /cfs/johns/vol/engine.256x256x110
  TEXTURE
        AMBIENT 1.0 DIFFUSE 0.0 SPECULAR 0.0 OPACITY 8.1
        COLOR 1.0 1.0 1.0
        TEXFUNC 0
\end{verbatim}

