\subsection{Texture and Color}
\subsubsection{Simple Texture Characteristics}
  The surface textures applied to an object drastically alter its overall
appearance, making textures and color one of the most important topics in
this manual.  As with many other renderers, textures can be declared and
associated with a name so that they may be used over and over again in 
a scene definition with less typing.  If a texture is only need once, or it
is unique to a particular object in the scene, then it may be declared along
with the object it is applied to, and does not need a name. 
 
  The simplest texture definition is a solid color with no image mapping 
or procedural texture mapping.  A solid color texture is defined by the
{\bf AMBIENT}, {\bf DIFFUSE}, {\bf SPECULAR}, {\bf OPACITY} and {\bf COLOR}  
parameters.  The {\bf AMBIENT} parameter defines the ambient lighting
coefficient to be used when shading the object.  Similarly, the {\bf DIFFUSE}
parameter is the relative contribution of the diffuse shading to the surface
appearance.  The {\bf SPECULAR} parameter is the contribution from perfectly
reflected rays, as if on a mirrored surface.  {\bf OPACITY} defines how
transparent a surface is.  An {\bf OPACITY} value of 0.0 renders the object
completely invisible.  An {\bf OPACITY} value of 1.0 makes the object
completely solid, and non-transmissive.  In general, the values for the
ambient, diffuse, and specular parameters should add up to 1.0, if they don't
then pixels may be over or underexposed quite easily.  These parameters
function in a manner similar to that of other ray tracers.  The {\bf COLOR} 
parameter is an RGB triple with each value ranging from 0.0 to 1.0 inclusive. 
If the RGB values stray from 0.0 to 1.0, results are undefined.
In the case of solid textures, a final parameter, {\bf TEXFUNC} is set to
zero (integer).

\subsubsection{Texture Declaration and Aliasing}
  To define a simple texture for use on several objects in a scene, the 
{\bf TEXDEF} keyword is used.  The {\bf TEXDEF} keyword is followed by
a case sensitive texture name, which will subsequently be used while 
defining objects.  If many objects in a scene use the same texture through
texture definition, a significant amount of memory may be saved since only
one copy of the texture is present in memory, and its shared by all
of the objects.  Here is an example of a solid texture definition:
\begin{verbatim}
 TEXDEF MyNewRedTexture   
    AMBIENT 0.1 DIFFUSE 0.9 SPECULAR 0.0 OPACITY 1.0 
    COLOR 1.0 0.0 0.0  TEXFUNC 0
\end{verbatim}
When this texture is used in an object definition, it is referenced only by
name.  Be careful not to use one of the other keywords as a defined texture,
this will probably cause the parser to explode, as I don't check for use
of keywords as texture names. 

  When a texture is declared within an object definition, it appears in 
an identical format to the {\bf TEXDEF} declaration, but the {\bf TEXTURE} 
keyword is used instead of {\bf TEXDEF}.  If it is useful to have several
names for the same texture (when you are too lazy to actually finish defining
different variations of a wood texture for example, and just want to be 
approximately correct for example) aliases can be constructed using the 
{\bf TEXALIAS} keyword, along with the alias name, and the original name.
An example of a texture alias is:
\begin{verbatim}
  TEXALIAS MyNewestRedTexture  MyNewRedTexture
\end{verbatim}
This line would alias MyNewestRedTexture to be the same thing as the 
previously declared MyNewRedTexture.  Note that the source texture must
be declared before any aliases that use it.

\subsubsection{Image Maps and Procedural Textures}
  Image maps and procedural textures very useful in making realistic looking
scenes.  A good image map can do as much for the realism of a wooden table
as any amount of sophisticated geometry or lighting.  Image maps are made by
wrapping an image on to an object in one of three ways, a spherical map, a
cylindrical map, and a planar map.  Procedural textures are used in a way
similar to the image maps, but they are on the fly and do not use much memory
compared to the image maps.  The main disadvantage of the procedural maps
is that they must be hard-coded into \RAY\ when it is compiled.

  The syntax used for all texture maps is fairly simple to learn.  The biggest
problem with the way that the parser is written now is that the different
mappings are selected by an integer, which is not very user friendly.  I 
expect to rewrite this section of the parser sometime in the near future to
alleviate this problem.  When I rewrite the parser, I may also end up altering
the parameters that are used to describe a texture map, and some of them may
become optional rather than required.  

\begin{center}
\begin{tabular}{|c|c|}
\multicolumn{2}{c}{Texture Mapping Functions} \\
\hline
{Value for TEXFUNC} & {Mapping and Texture Description}\\
\hline
{0} & {No special texture, plain shading}  \\
{1} & {3D checkerboard function, like a rubik's cube}  \\
{2} & {Grit Texture, randomized surface color}  \\
{3} & {3D marble texture, uses object's base color}  \\
{4} & {3D wood texture, light and dark brown, not very good yet}  \\
{5} & {3D gradient noise function (can't remember what it look like}  \\
{6} & {Don't remember}  \\
{7} & {Cylindrical Image Map, requires ppm filename}  \\
{8} & {Spherical Image Map, requires ppm filename}  \\
{9} & {Planar Image Map, requires ppm filename}  \\
\hline
\end{tabular}
\end{center}

Here's an example of a sphere, with a spherical image map applied to its
surface:
\begin{verbatim}
SPHERE
  CENTER 2.0  0.0 5.0   
  RAD 2.0 
  TEXTURE 
    AMBIENT  0.4 DIFFUSE  0.8 SPECULAR 0.0  OPACITY 1.0 
    COLOR 1.0 1.0 1.0  
    TEXFUNC 7 /cfs/johns/imaps/fire644.ppm  
      CENTER 2.0 0.0 5.0
      ROTATE 0.0 0.0 0.0 
      SCALE  2.0 -2.0 1.0
\end{verbatim}

Basically, the image maps require the center, rotate and scale parameters so
that you can position the image map on the object properly

