 TRACER(69)                  FRITZZ GRAPHICS            TRACER(69)



NAME
     tracer- run a simple ray tracing procedure

SYNOPSIS
     tracer -r -o [file] -i [file] -p [file] -s <file> -a<number> -S<number>

DESCRIPTION
     Tracer is a program developed originally to study how
     ray tracing works, and was later modified to the present state
     to make it more compatible for animated film production.

     It is capable of depicting a number of balls (up to 150)
     and a plane that is covered with a tiling of any bitmapped picture.


OPTIONS
     -r If used, causes the output to be computed and output rotated 90
	degrees counterclockwise.  Good for printing wide images.

     -o Chooses the output picture file. If the option is not used, the
	default is tracer.pic.

     -i Chooses the input (ball) data file. If no argument is given, stdin
        is used. If the option is not used the default is tracer.ball.

     -p Chooses the parameters data file.  If no argument is given, stdin
	is used. If the option is not used, the default is tracer.param.
 
     -s Chooses the file containing the tiling bitmap. It requires an
        an argument. If the option is not used the default is tracer.pat.

     -a Chooses level of antialiasing.  Value must be an integer from 1 to
        9.  Determines number of subcells computed per pixel.  Default is 1.

     -S Chooses contrast of the pattern. 0.0 is no contrast, 1.0 is maximum
        contrast. 1.0 is the default. (useful for fading during animation)

PROGRAM NOTES
     This program generates an IFF file in 640 x 400, 16 color mode, use any
     of the standard IFF viewers to examine the results.

     There are three necessary input files: ball data, the parameters file,
     and a pattern bitmap.  The tiling bitmap can be digitized data, it must
     be in the form of scan lines no longer than 512 bytes followed by newlines.
     
     The ball data is of the following form:

     x y z rad ior refract reflect diffuse ambient

     on each line where x y & z are the coordinates of the center of 
     the ball, rad is the radius of the ball, ior is the index of refraction
     for translucent materials (index of refraction for glass is about 1.5)
     the last four numbers determine how much of each atrribute is used.
     Thus a pure silver ball would have 0.0 1.0 0.0 0.0 as the last numbers,
     and a pure glass ball would have 1.0 0.0 0.0 0.0 .

     The parameters file is of the following form:

     xmin xmax ymin ymax xpix ypix ar vpx vpy vpz lsx lsy lsz lsrad

     Here xmin, xmax, ymin, and ymax define the view port through which the
     scene is computed.  The number of computed pixels in each axis are
     determined by xpix and ypix.  The aspect ratio (ar), if positive, applies
     to the final image.  If negative, it applies to each pixel.  In either 
     case, the viewport is adjusted to fit entirely in the final image.  If
     the aspect ratio is zero, the given viewport is divided into xpix*ypix
     pixels and computed without further ado.  The location of the viewing
     point is given by vpx, vpy, and vpz.  The light source position and
     radius are in lsx, lsy, lsz, and lsrad.

     The antialiasing scheme merely breaks each pixel down into a square array
     of subcells, computes the intensity of each, and uses the average of
     their values as the value for the entire pixel.  For instance, an input
     of "-a5" uses a 5 x 5 array of subcells.  This results in a remarkable
     reduction of aliasing, at the expense of (in this case) 25 times longer
     run time. ( warning: use only if you have alot of time on your hands )

FILES
     tracer.pic		default output file
     tracer.ball	default ball data
     tracer.param	default parms file
     tracer.pat		default floor pattern

AUTHORS
     friedrich knauss		- original author
     Steve Williams & Jim Horn  - added anti-aliasing and parameter files
     Mark C Reichert		- added fast amiga math and IFF auto-save

BUGS
     As with any good software, the complexity of this program hides 
     all bugs.

     There is sometimes a bug which causes a divide by zero fault. This
     occurs rarely due to some "bad" ball specifications. If you can find
     the source of this, please try to find some way to let me ( mcr ) know
     where the fault lies.

     Also, if you want to be able to do a ctrl-C to stop this program at
     any point, you should run it directly for a cli, not from a shell
     because most shells are not capable of passing on the break to their
     subprocesses ( unless Matt Dillon has fixed that by the time you 
     are reading this ).


