#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 3 (of 19)."
# Contents:  Doc/Guide/transform.tex Examples/boxball.ray Reconfigure
#   libray/libcommon/color.h libray/libcommon/error.h
#   libray/libcommon/expr.h libray/libcommon/rotate.h
#   libray/libcommon/sampling.h libray/libcommon/translate.h
#   libray/libimage/image.h libray/libobj/bounds.h libray/libobj/csg.h
#   libray/libobj/cylinder.h libray/libobj/instance.h
#   libray/libobj/poly.h libray/libobj/torus.h
#   libray/libsurf/atmosphere.h libray/libtext/blotch.c
#   libray/libtext/bump.c libray/libtext/checker.c
#   libray/libtext/fbmbump.c libray/libtext/gloss.c
#   libray/libtext/imagetext.h libray/libtext/marble.c
#   libray/libtext/mount.c libshade/builtin.c libshade/stats.h
#   libshade/symtab.h libshade/viewing.h
# Wrapped by cek@oyoy on Mon Oct 28 20:03:29 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Doc/Guide/transform.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Doc/Guide/transform.tex'\"
else
echo shar: Extracting \"'Doc/Guide/transform.tex'\" \(1496 characters\)
sed "s/^X//" >'Doc/Guide/transform.tex' <<'END_OF_FILE'
X\chapter {Transformations}
X
XRayshade supports the application of linear transformations to objects
Xand textures.  If more than one transformation is specified, the
Xtotal resulting transformation is computed and applied.
X
X\begin{defkey}{translate}{\evec{delta}}
XTranslate (move) by {\em delta}.
X\end{defkey}
X
X\begin{defkey}{rotate}{\evec{axis} $\theta$}
XRotate counter-clockwise about the given axis by $\theta$ degrees.
X\end{defkey}
X
X\begin{defkey}{scale}{\evec{v}}
XScale by {\em v}.
X\end{defkey}
XAll three scaling components must be non-zero, else degenerate matrices
Xwill result.
X
X\begin{defkey}{transform}{\evec{row1} \evec{row2} \evec{row3} [\evec{delta}]}
XApply the given 3-by-3 transformation matrix.  If given, {\em delta}
Xspecifies a translation vector.
X\end{defkey}
X
XTransformations should
Xbe specified in the order in which they are to be applied
Ximmediately following the item to
Xbe transformed.  For example:
X
X\begin{verbatim}
X        /*
X         * Ellipsoid, rotated cube
X         */
X        sphere 1. 0 0 0   scale 2. 1. 1. translate 0 0 -2.5
X        box 0 0 0 .5 .5 .5
X           rotate 0 0 1 45 rotate 1 0 0 45 translate 0 0 2.5
X\end{verbatim}
X
XTransformations may also be applied to textures:
X
X\begin{verbatim}
X   plane 0 0 -4  0 0 1
X     texture checker red scale 2 2 2 rotate 0 0 1 45
X\end{verbatim}
X
XNote that transformation parameters may be specified using
Xof animated expressions, causing the transformations themselves
Xto be animated.  See Appendix B for further details.
END_OF_FILE
if test 1496 -ne `wc -c <'Doc/Guide/transform.tex'`; then
    echo shar: \"'Doc/Guide/transform.tex'\" unpacked with wrong size!
fi
# end of 'Doc/Guide/transform.tex'
fi
if test -f 'Examples/boxball.ray' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Examples/boxball.ray'\"
else
echo shar: Extracting \"'Examples/boxball.ray'\" \(1380 characters\)
sed "s/^X//" >'Examples/boxball.ray' <<'END_OF_FILE'
X/*
X * White diffuse sphere with wooden box-shaped regions removed.
X * Rod Bogart 11/90
X */
Xeyep  4 3 5
Xfov 15
Xlight 1 directional 1 0.5 2
Xsample 1	/* Increase this value for less noisy image */
Xreport verbose
Xscreen 320 256
X
Xplane 0. 0. -5. 0. 0. 1 texture marble scale 2 2 1
X
Xdifference
X	sphere  0.65 0 0 0
X	grid 3 3 3	
X		applysurf ambient .2 .05 .05
X			  diffuse .8 .1 .05
X			  specular .05 .05 .05
X	  		  specpow 20
X
X		box 0.3 0.3 -0.7 0.7 0.7 -0.3 
X		box -0.2 0.3 -0.7 0.2 0.7 -0.3 
X		box -0.7 0.3 -0.7 -0.3 0.7 -0.3 
X
X		box 0.3 0.3 -0.2 0.7 0.7 0.2 
X		box -0.2 0.3 -0.2 0.2 0.7 0.2 
X		box -0.7 0.3 -0.2 -0.3 0.7 0.2 
X
X		box 0.3 0.3 0.3 0.7 0.7 0.7 
X		box -0.2 0.3 0.3 0.2 0.7 0.7 
X		box -0.7 0.3 0.3 -0.3 0.7 0.7 
X
X		box 0.3 -0.2 -0.7 0.7 0.2 -0.3 
X		box -0.2 -0.2 -0.7 0.2 0.2 -0.3 
X		box -0.7 -0.2 -0.7 -0.3 0.2 -0.3 
X
X		box 0.3 -0.2 -0.2 0.7 0.2 0.2 
X		box -0.2 -0.2 -0.2 0.2 0.2 0.2 
X		box -0.7 -0.2 -0.2 -0.3 0.2 0.2 
X
X		box 0.3 -0.2 0.3 0.7 0.2 0.7 
X		box -0.2 -0.2 0.3 0.2 0.2 0.7 
X		box -0.7 -0.2 0.3 -0.3 0.2 0.7 
X
X		box 0.3 -0.7 -0.7 0.7 -0.3 -0.3 
X		box -0.2 -0.7 -0.7 0.2 -0.3 -0.3 
X		box -0.7 -0.7 -0.7 -0.3 -0.3 -0.3 
X
X		box 0.3 -0.7 -0.2 0.7 -0.3 0.2 
X		box -0.2 -0.7 -0.2 0.2 -0.3 0.2 
X		box -0.7 -0.7 -0.2 -0.3 -0.3 0.2 
X
X		box 0.3 -0.7 0.3 0.7 -0.3 0.7 
X		box -0.2 -0.7 0.3 0.2 -0.3 0.7 
X		box -0.7 -0.7 0.3 -0.3 -0.3 0.7 
X	end texture wood scale 3 1 1
Xend
END_OF_FILE
if test 1380 -ne `wc -c <'Examples/boxball.ray'`; then
    echo shar: \"'Examples/boxball.ray'\" unpacked with wrong size!
fi
# end of 'Examples/boxball.ray'
fi
if test -f 'Reconfigure' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'Reconfigure'\"
else
echo shar: Extracting \"'Reconfigure'\" \(1482 characters\)
sed "s/^X//" >'Reconfigure' <<'END_OF_FILE'
X#!/bin/sh
X#
X# Reconfigure
X# Extract .SH files using values in config.sh
X#
X# Useful in environments in which the source tree
X# is used to build executables for more than one kind of machine.
X# After running Configure on a particular machine, copy the
X# resulting config.sh to, for example, config.sh.SPARC.
X# When you have to recompile for some reason, running
X# "Reconfigure config.sh.SPARC" should produce the correct Makefiles
X# and the like.
X#
X# If you need to run "make depend" for a machine other than the one
X# that the Configure script was last run for, you will need to remake
X# the "mkdep" script by removing it, copying the appropriate
X# config.sh.MACHINE file to config.sh, and running "Configure -d".
X#
X
Xcase "$1" in
X'')
X	configfile="./config.sh"
X	;;
X*)
X	if test -f "$1" ; then
X		configfile="$1"
X	else
X		echo "$1 does not exist."
X		exit
X	fi
Xesac
X
Xecho "Reconfiguring using $configfile."
X. $configfile
X
Xecho " "
Xecho "Doing variable substitutions on .SH files..."
Xset x `awk '{print $1}' <MANIFEST | $grep '\.SH'`
Xshift
Xcase $# in
X0) set x *.SH; shift;;
Xesac
Xif test ! -f $1; then
X    shift
Xfi
Xfor file in $*; do
X    case "$file" in
X    */*)
X	dir=`$expr X$file : 'X\(.*\)/'`
X	file=`$expr X$file : 'X.*/\(.*\)'`
X	(cd $dir && . $file)
X	;;
X    *)
X	. $file
X	;;
X    esac
Xdone
Xif test -f config.h.SH; then
X    if test ! -f config.h; then
X	: oops, they left it out of MANIFEST, probably, so do it anyway.
X	. config.h.SH
X    fi
Xfi
X
Xecho "You must run 'make depend' then 'make'."
END_OF_FILE
if test 1482 -ne `wc -c <'Reconfigure'`; then
    echo shar: \"'Reconfigure'\" unpacked with wrong size!
fi
chmod +x 'Reconfigure'
# end of 'Reconfigure'
fi
if test -f 'libray/libcommon/color.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/color.h'\"
else
echo shar: Extracting \"'libray/libcommon/color.h'\" \(1323 characters\)
sed "s/^X//" >'libray/libcommon/color.h' <<'END_OF_FILE'
X/*
X * color.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: color.h,v 4.0.1.1 1991/09/29 15:32:09 cek Exp cek $
X *
X * $Log: color.h,v $
X * Revision 4.0.1.1  1991/09/29  15:32:09  cek
X * patch1: Fixed #endif typo.
X *
X * Revision 4.0  91/07/17  14:30:08  kolb
X * Initial version.
X * 
X */
X#ifndef COLOR_H
X#define COLOR_H
X/*
X * Color
X */
Xtypedef struct Color {
X	Float r, g, b;			/* Red, green, blue. */
X} Color;
X
X#define ColorScale(s,c,a)		(a)->r = (s)*(c).r, \
X					(a)->g = (s)*(c).g, \
X					(a)->b = (s)*(c).b
X
X#define ColorAddScaled(x, s, y, c)	(c)->r = (x).r + (s)*(y).r, \
X					(c)->g = (x).g + (s)*(y).g, \
X					(c)->b = (x).b + (s)*(y).b
X
X#define ColorMultiply(x,y,a)		(a)->r = (x).r*(y).r, \
X					(a)->g = (x).g*(y).g, \
X					(a)->b = (x).b*(y).b
X
X#define ColorAdd(x,y,a)			(a)->r = (x).r+(y).r, \
X					(a)->g = (x).g+(y).g, \
X					(a)->b = (x).b+(y).b
X#endif /* COLOR_H */
END_OF_FILE
if test 1323 -ne `wc -c <'libray/libcommon/color.h'`; then
    echo shar: \"'libray/libcommon/color.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/color.h'
fi
if test -f 'libray/libcommon/error.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/error.h'\"
else
echo shar: Extracting \"'libray/libcommon/error.h'\" \(1417 characters\)
sed "s/^X//" >'libray/libcommon/error.h' <<'END_OF_FILE'
X/*
X * error.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: error.h,v 4.0 91/07/17 14:30:27 kolb Exp Locker: kolb $
X *
X * $Log:	error.h,v $
X * Revision 4.0  91/07/17  14:30:27  kolb
X * Initial version.
X * 
X */
X#ifndef ERROR_H
X#define ERROR_H
X/*
X * Error severity codes, passed to user-provided RLerror()
X * function which optionally prints and optionally exits.
X *
X * RL_ADVISE	Message may safely be safely suppressed, though
X *		the resulting image may not be exactly what you expect.
X * RL_WARN	Message should probably be printed; image will most
X *		likely be affected.
X * RL_ABORT	Message should be printed -- couldn't perform a request.
X *		The resulting image will be affected.
X * RL_PANIC	Fatal error -- call to RLerror() must not return.
X */
X#define RL_ADVISE	0	/* Advisory */
X#define RL_WARN		1	/* Warning */
X#define RL_ABORT	2	/* Aborted */
X#define RL_PANIC	3	/* Panic */
X
Xextern void RLerror();		/* application-supplied reporting routine */
X#endif /* ERROR_H */
END_OF_FILE
if test 1417 -ne `wc -c <'libray/libcommon/error.h'`; then
    echo shar: \"'libray/libcommon/error.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/error.h'
fi
if test -f 'libray/libcommon/expr.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/expr.h'\"
else
echo shar: Extracting \"'libray/libcommon/expr.h'\" \(1552 characters\)
sed "s/^X//" >'libray/libcommon/expr.h' <<'END_OF_FILE'
X/*
X * expr.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb, Rod G. Bogart
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: expr.h,v 4.0 91/07/17 14:30:47 kolb Exp Locker: kolb $
X *
X * $Log:	expr.h,v $
X * Revision 4.0  91/07/17  14:30:47  kolb
X * Initial version.
X * 
X */
X#ifndef EXPR_H
X#define EXPR_H
X
X#define FLOAT_EXPR		0
X#define BUILTIN_EXPR		1
X
Xtypedef struct Expr {
X	short	type,			/* Expr type (float/builtin/time) */
X		timevary,		/* does the expr vary over time? */
X		symtab,			/* is the expr in the symtab? */
X		nparams;		/* # of params, if builtin */
X	Float	value,			/* float val/last eval if timeexpr */
X		timenow,		/* time of last evaluation */
X		(*function)();
X	struct Expr **params;		/* parameters, if a builtin */
X} Expr;
X
Xtypedef struct ExprAssoc {
X	Float *lhs;			/* left-hand side */
X	Expr *expr;			/* right-hand side */
X	struct ExprAssoc *next;		/* Next in list */
X} ExprAssoc;
X	
Xextern Float	ExprEval();
X
Xextern Expr	*ExprResolve1(), *ExprResolve2(), *ExprResolve3(),
X		*ExprResolve4(), *ExprResolve5(), *ExprFloatCreate();
Xextern Expr	*TimeExpr, *FrameExpr, *ExprReuseFloatCreate();
X
Xextern ExprAssoc *AssocCreate();
X
X#endif /* EXPR_H */
END_OF_FILE
if test 1552 -ne `wc -c <'libray/libcommon/expr.h'`; then
    echo shar: \"'libray/libcommon/expr.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/expr.h'
fi
if test -f 'libray/libcommon/rotate.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/rotate.h'\"
else
echo shar: Extracting \"'libray/libcommon/rotate.h'\" \(1244 characters\)
sed "s/^X//" >'libray/libcommon/rotate.h' <<'END_OF_FILE'
X/*
X * rotate.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: rotate.h,v 4.0 91/07/17 14:31:26 kolb Exp Locker: kolb $
X *
X * $Log:	rotate.h,v $
X * Revision 4.0  91/07/17  14:31:26  kolb
X * Initial version.
X * 
X */
X#ifndef ROTATE_H
X#define ROTATE_H
X
X#define TransRotateCreate()		TransCreate((TransRef)RotateCreate(), RotateMethods())
X
X#define TransRotateSetX(t, v)		TransAssoc(t, &((Rotate *)t->tr)->x, v)
X#define TransRotateSetY(t, v)		TransAssoc(t, &((Rotate *)t->tr)->y, v)
X#define TransRotateSetZ(t, v)		TransAssoc(t, &((Rotate *)t->tr)->z, v)
X#define TransRotateSetTheta(t, v)	TransAssoc(t, &((Rotate *)t->tr)->theta, v)
X
Xtypedef struct {
X	Float x, y, z, theta;
X} Rotate;
X
Xextern Rotate *RotateCreate();
Xextern TransMethods *RotateMethods();
Xextern void RotatePropagate();
X
X#endif /* ROTATE_H */
END_OF_FILE
if test 1244 -ne `wc -c <'libray/libcommon/rotate.h'`; then
    echo shar: \"'libray/libcommon/rotate.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/rotate.h'
fi
if test -f 'libray/libcommon/sampling.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/sampling.h'\"
else
echo shar: Extracting \"'libray/libcommon/sampling.h'\" \(1485 characters\)
sed "s/^X//" >'libray/libcommon/sampling.h' <<'END_OF_FILE'
X/*
X * sampling.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: sampling.h,v 4.0 91/07/17 14:32:01 kolb Exp Locker: kolb $
X *
X * $Log:	sampling.h,v $
X * Revision 4.0  91/07/17  14:32:01  kolb
X * Initial version.
X * 
X */
X#ifndef SAMPLING_H
X#define SAMPLING_H
X
X/*
X * # of subsamples to take within each of the totsamples slots when
X * computing 'animated' bounding boxes.
X */
X#define TIME_SUB_SAMPLES	10
X
Xtypedef struct SampleInfo {
X	int	totsamples,	/* # of samples/pixel */
X		sidesamples,	/* sqrt(samples) */
X		gaussian,	/* gaussian filter? */
X		framenum,	/* current frame numer */
X		timemagic;	/* # of time samples per screen... */
X	Float	weight,		/* 1. / totsamples */
X		spacing,	/* 1. / sidesamples  */
X		filterwidth,	/* total width of filter */
X		filterdelta,	/* filterwidth * spacing */
X		**filter,	/* pixel filter, sidesamp by sidesamp */
X		starttime,	/* start time */
X		shutter;	/* length of time shutter is open */
X} SampleInfo;
X
Xextern SampleInfo Sampling;
X
Xextern void	SamplingSetOptions(), UnitCirclePoint();
X
X#endif /* SAMPLING */
END_OF_FILE
if test 1485 -ne `wc -c <'libray/libcommon/sampling.h'`; then
    echo shar: \"'libray/libcommon/sampling.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/sampling.h'
fi
if test -f 'libray/libcommon/translate.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libcommon/translate.h'\"
else
echo shar: Extracting \"'libray/libcommon/translate.h'\" \(1199 characters\)
sed "s/^X//" >'libray/libcommon/translate.h' <<'END_OF_FILE'
X/*
X * translate.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: translate.h,v 4.0 91/07/17 14:32:49 kolb Exp Locker: kolb $
X *
X * $Log:	translate.h,v $
X * Revision 4.0  91/07/17  14:32:49  kolb
X * Initial version.
X * 
X */
X#ifndef TRANSLATE_H
X#define TRANSLATE_H
X
X#define TransTranslateCreate()		TransCreate((TransRef)TranslateCreate(), TranslateMethods())
X
X#define TransTranslateSetX(t, v)		TransAssoc(t, &((Translate *)t->tr)->x, v)
X#define TransTranslateSetY(t, v)		TransAssoc(t, &((Translate *)t->tr)->y, v)
X#define TransTranslateSetZ(t, v)		TransAssoc(t, &((Translate *)t->tr)->z, v)
X
Xtypedef Vector Translate;
X
Xextern Translate *TranslateCreate();
Xextern TransMethods *TranslateMethods();
Xextern void TranslatePropagate();
X
X#endif /* TRANSLATE_H */
END_OF_FILE
if test 1199 -ne `wc -c <'libray/libcommon/translate.h'`; then
    echo shar: \"'libray/libcommon/translate.h'\" unpacked with wrong size!
fi
# end of 'libray/libcommon/translate.h'
fi
if test -f 'libray/libimage/image.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libimage/image.h'\"
else
echo shar: Extracting \"'libray/libimage/image.h'\" \(1190 characters\)
sed "s/^X//" >'libray/libimage/image.h' <<'END_OF_FILE'
X/*
X * image.h
X *
X * Copyright (C) 1989, 1991, Rod G. Bogart, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: image.h,v 4.0 91/07/17 14:33:39 kolb Exp Locker: kolb $
X *
X * $Log:	image.h,v $
X * Revision 4.0  91/07/17  14:33:39  kolb
X * Initial version.
X * 
X */
X#ifndef IMAGE_H
X#define IMAGE_H
X
X/*
X * Generic image object for texture map storage.
X */
Xtypedef struct Image {
X	int	width, height,		/* Image size */
X		chan, has_alpha,	/* # of channels, has alpha info? */
X		totalchan,		/* # channels + any alpha channel */
X		chansize;		/* width * height */
X	unsigned char *data;		/* Image */
X	char	*filename;		/* Filename (identifier) */
X	struct Image *next;		/* Next image in list. */
X} Image;
X
XImage	*ImageCreate(), *ImageFind(), *ImageRead();
Xvoid	ImageIndex();
X
X#endif /* IMAGE_H */
END_OF_FILE
if test 1190 -ne `wc -c <'libray/libimage/image.h'`; then
    echo shar: \"'libray/libimage/image.h'\" unpacked with wrong size!
fi
# end of 'libray/libimage/image.h'
fi
if test -f 'libray/libobj/bounds.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/bounds.h'\"
else
echo shar: Extracting \"'libray/libobj/bounds.h'\" \(1348 characters\)
sed "s/^X//" >'libray/libobj/bounds.h' <<'END_OF_FILE'
X/*
X * bounds.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: bounds.h,v 4.0 91/07/17 14:36:26 kolb Exp Locker: kolb $
X *
X * $Log:	bounds.h,v $
X * Revision 4.0  91/07/17  14:36:26  kolb
X * Initial version.
X * 
X */
X#ifndef BOUNDS_H
X#define BOUNDS_H
X
X/*
X * Used to make indices into bounding box arrays more readable.
X */
X#define X	0
X#define Y	1
X#define Z	2
X#define LOW	0
X#define HIGH	1
X
X/*
X * If minimum X is greater than maximum, then
X * is considered to be unbounded.
X */
X
X#define UNBOUNDED(o)	((o)->bounds[LOW][X] > (o)->bounds[HIGH][X])
X
X/*
X * Is the point p outside of the bounding box "b"?
X */
X#define OutOfBounds(p,b) ((p)->x < b[0][0] || (p)->x > b[1][0] ||\
X			  (p)->y < b[0][1] || (p)->y > b[1][1] ||\
X			  (p)->z < b[0][2] || (p)->z > b[1][2])
X
Xextern void 	BoundsCopy(), BoundsPrint(),
X		BoundsInit(), BoundsEnlarge(),
X		BoundsTransform();
X
Xextern int	BoundsIntersect();
X#endif /* BOUNDS_H */
END_OF_FILE
if test 1348 -ne `wc -c <'libray/libobj/bounds.h'`; then
    echo shar: \"'libray/libobj/bounds.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/bounds.h'
fi
if test -f 'libray/libobj/csg.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/csg.h'\"
else
echo shar: Extracting \"'libray/libobj/csg.h'\" \(1237 characters\)
sed "s/^X//" >'libray/libobj/csg.h' <<'END_OF_FILE'
X/*
X * csg.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: csg.h,v 4.0 91/07/17 14:37:06 kolb Exp Locker: kolb $
X *
X * $Log:	csg.h,v $
X * Revision 4.0  91/07/17  14:37:06  kolb
X * Initial version.
X * 
X */
X#ifndef CSG_H
X#define CSG_H
X
X#define GeomCsgCreate(t)	GeomCreate((GeomRef)CsgCreate(t), CsgMethods())
X
X/*
X * CSG (Constructive Solid Geometry)
X */
X#define CSG_UNION	0
X#define CSG_INTERSECT	1
X#define CSG_DIFFERENCE	2
X
Xtypedef struct Csg {
X	char operator;			/* Union, Intersect, or Difference */
X	struct Geom *obj1, *obj2;
X	int (*intmeth)();		/* Intersection method. */
X	Float bounds[2][3];
X} Csg;
X
Xextern char	*CsgName();
Xextern Csg	*CsgCreate();
Xextern int	CsgIntersect(), CsgConvert();
Xextern void	CsgBounds();
Xextern int	FirstCsgGeom();
Xextern Methods	*CsgMethods();
X
X#endif /* CSG_H */
END_OF_FILE
if test 1237 -ne `wc -c <'libray/libobj/csg.h'`; then
    echo shar: \"'libray/libobj/csg.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/csg.h'
fi
if test -f 'libray/libobj/cylinder.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/cylinder.h'\"
else
echo shar: Extracting \"'libray/libobj/cylinder.h'\" \(1134 characters\)
sed "s/^X//" >'libray/libobj/cylinder.h' <<'END_OF_FILE'
X/* 
X * cylinder.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: cylinder.h,v 4.0 91/07/17 14:37:18 kolb Exp Locker: kolb $
X *
X * $Log:	cylinder.h,v $
X * Revision 4.0  91/07/17  14:37:18  kolb
X * Initial version.
X * 
X */
X#ifndef CYLINDER_H
X#define CYLINDER_H
X
X#define GeomCylinderCreate(c,a,r) GeomCreate((GeomRef)CylinderCreate(c,a,r), \
X					 CylinderMethods())
X
X/*
X * Cylinder
X */
Xtypedef struct cylinder	{
X	Trans trans;
X} Cylinder;
X
Xextern Cylinder	*CylinderCreate();
Xextern int	CylinderIntersect(), CylinderEnter(), CylinderNormal();
Xextern void	CylinderBounds(), CylinderUV(),
X		CylinderStats();
Xextern char	*CylinderName();
Xextern Methods	*CylinderMethods();
X
X#endif /* CYLINDER_H */
END_OF_FILE
if test 1134 -ne `wc -c <'libray/libobj/cylinder.h'`; then
    echo shar: \"'libray/libobj/cylinder.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/cylinder.h'
fi
if test -f 'libray/libobj/instance.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/instance.h'\"
else
echo shar: Extracting \"'libray/libobj/instance.h'\" \(1159 characters\)
sed "s/^X//" >'libray/libobj/instance.h' <<'END_OF_FILE'
X/*
X * instance.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: instance.h,v 4.0 91/07/17 14:38:30 kolb Exp Locker: kolb $
X *
X * $Log:	instance.h,v $
X * Revision 4.0  91/07/17  14:38:30  kolb
X * Initial version.
X * 
X */
X#ifndef INSTANCE_H
X#define INSTANCE_H
X
X#define GeomInstanceCreate(o)  GeomCreate((GeomRef)InstanceCreate(o), \
X					InstanceMethods())
X
X/*
X * Instance object
X */
Xtypedef struct {
X	struct Geom *obj;	/* Geom being instantiated */
X	Float bounds[2][3];	/* Bounding box of object */
X} Instance;
X
Xextern char	*InstanceName();
Xextern int	InstanceIntersect(), InstanceConvert();
Xextern void	InstanceBounds();
Xextern Instance	*InstanceCreate();
Xextern Methods	*InstanceMethods();
X
X#endif /* INSTANCE_H */
END_OF_FILE
if test 1159 -ne `wc -c <'libray/libobj/instance.h'`; then
    echo shar: \"'libray/libobj/instance.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/instance.h'
fi
if test -f 'libray/libobj/poly.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/poly.h'\"
else
echo shar: Extracting \"'libray/libobj/poly.h'\" \(1275 characters\)
sed "s/^X//" >'libray/libobj/poly.h' <<'END_OF_FILE'
X/*
X * poly.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: poly.h,v 4.0 91/07/17 14:39:04 kolb Exp Locker: kolb $
X *
X * $Log:	poly.h,v $
X * Revision 4.0  91/07/17  14:39:04  kolb
X * Initial version.
X * 
X */
X#ifndef POLY_H
X#define POLY_H
X
X#define GeomPolygonCreate(r,p,f) GeomCreate((GeomRef)PolygonCreate(r,p,f), \
X					PolygonMethods())
X
X/*
X * Polygon
X */
Xtypedef struct {
X	Vector norm;		/* Normal to polygon */
X	Float d;		/* Plane constant */
X	char index;		/* Which normal coord is "dominant"? */
X	Vector *points;		/* Array of vertices */
X	int npoints;		/* Number of vertices */
X} Polygon;
X
Xextern Polygon	*PolygonCreate();
Xextern Methods	*PolygonMethods();
Xextern int	PolygonIntersect(), PolygonEnter(), PolygonNormal();
Xextern void	PolygonBounds(), PolygonUV(), PolygonStats();
Xextern char	*PolygonName();
X
X#endif /* POLY_H */
END_OF_FILE
if test 1275 -ne `wc -c <'libray/libobj/poly.h'`; then
    echo shar: \"'libray/libobj/poly.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/poly.h'
fi
if test -f 'libray/libobj/torus.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libobj/torus.h'\"
else
echo shar: Extracting \"'libray/libobj/torus.h'\" \(1216 characters\)
sed "s/^X//" >'libray/libobj/torus.h' <<'END_OF_FILE'
X/*
X * torus.h
X *
X * Copyright (C) 1990, 1991, Mark Polipec, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: torus.h,v 4.0 91/07/17 14:39:31 kolb Exp Locker: kolb $
X *
X * $Log:	torus.h,v $
X * Revision 4.0  91/07/17  14:39:31  kolb
X * Initial version.
X * 
X */
X#ifndef TORUS_H
X#define TORUS_H
X
X#define GeomTorusCreate(a,b,p,n) GeomCreate((GeomRef)TorusCreate(a,b,p,n), \
X					TorusMethods())
X
X/*
X * Torus
X */
Xtypedef struct {
X	Float a;		/* tube radius */
X	Float b;		/* swept radius */
X	Float aa, bb;		/* squares of the above */
X	Trans trans;		/* general<-->canonical transform */
X} Torus;
X
Xextern Torus	*TorusCreate();
Xextern int	TorusIntersect(), TorusEnter(), TorusNormal();
Xextern void	TorusBounds(), TorusUV(), TorusStats();
Xextern char	*TorusName();
Xextern Methods	*TorusMethods();
X
X#endif /* TORUS_H */
END_OF_FILE
if test 1216 -ne `wc -c <'libray/libobj/torus.h'`; then
    echo shar: \"'libray/libobj/torus.h'\" unpacked with wrong size!
fi
# end of 'libray/libobj/torus.h'
fi
if test -f 'libray/libsurf/atmosphere.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libsurf/atmosphere.h'\"
else
echo shar: Extracting \"'libray/libsurf/atmosphere.h'\" \(1227 characters\)
sed "s/^X//" >'libray/libsurf/atmosphere.h' <<'END_OF_FILE'
X/*
X * atmosphere.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: atmosphere.h,v 4.0 91/07/17 14:40:06 kolb Exp Locker: kolb $
X *
X * $Log:	atmosphere.h,v $
X * Revision 4.0  91/07/17  14:40:06  kolb
X * Initial version.
X * 
X */
X#ifndef ATMOSPHERE_H
X#define ATMOSPHERE_H
X
X#include "libcommon/common.h"
X
Xtypedef char * AtmosRef;
X
Xtypedef struct Medium {
X	Float	index,			/* Index of refraction */
X		statten;		/* specular transmission attenuation */	
X	struct Medium *next;
X} Medium;
X
Xtypedef struct Atmosphere {
X	AtmosRef data;			/* Effect info */
X	void	(*method)();		/* Atmosphere method */
X	struct Atmosphere *next;	/* Next effect */
X} Atmosphere;
X
Xextern Medium		*MediumPush();
Xextern Atmosphere	*AtmosCreate(), *AtmosphereCopy();
Xextern void		Atmospherics();
X
X#endif /* ATMOSPHERE_H */
END_OF_FILE
if test 1227 -ne `wc -c <'libray/libsurf/atmosphere.h'`; then
    echo shar: \"'libray/libsurf/atmosphere.h'\" unpacked with wrong size!
fi
# end of 'libray/libsurf/atmosphere.h'
fi
if test -f 'libray/libtext/blotch.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/blotch.c'\"
else
echo shar: Extracting \"'libray/libtext/blotch.c'\" \(1369 characters\)
sed "s/^X//" >'libray/libtext/blotch.c' <<'END_OF_FILE'
X/*
X * blotch.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: blotch.c,v 4.0 91/07/17 14:41:31 kolb Exp Locker: kolb $
X *
X * $Log:	blotch.c,v $
X * Revision 4.0  91/07/17  14:41:31  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "blotch.h"
X
X/*
X * Create and return a reference to a "blotch" texture.
X */
XBlotch *
XBlotchCreate(mix, surf)
XFloat mix;
XSurface *surf;
X{
X	Blotch *blotch;
X
X	blotch = (Blotch *)Malloc(sizeof(Blotch));
X	blotch->mix = mix;
X	blotch->surf = surf;
X	return blotch;
X}
X
X/*
X * Apply "blotch" texture.
X */
X/*ARGSUSED*/
Xvoid
XBlotchApply(blotch, prim, ray, pos, norm, gnorm, surf)
XBlotch *blotch;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Float val;
X
X	/*
X	 * "mix" represents the 'average' noise value at a point.
X	 */
X	val = Noise3(pos);
X	if (val > blotch->mix) {
X		val = (val - blotch->mix) / (1. - blotch->mix);
X		SurfaceBlend(surf, blotch->surf, 1. - val, val);
X	}
X}
END_OF_FILE
if test 1369 -ne `wc -c <'libray/libtext/blotch.c'`; then
    echo shar: \"'libray/libtext/blotch.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/blotch.c'
fi
if test -f 'libray/libtext/bump.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/bump.c'\"
else
echo shar: Extracting \"'libray/libtext/bump.c'\" \(1213 characters\)
sed "s/^X//" >'libray/libtext/bump.c' <<'END_OF_FILE'
X/*
X * bump.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: bump.c,v 4.0 91/07/17 14:41:39 kolb Exp Locker: kolb $
X *
X * $Log:	bump.c,v $
X * Revision 4.0  91/07/17  14:41:39  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "bump.h"
X
X/*
X * Create and return a reference to a "bump" texture.
X */
XBump *
XBumpCreate(size)
XFloat size;
X{
X	Bump *bump;
X
X	bump = (Bump *)Malloc(sizeof(Bump));
X	bump->size = size;
X	return bump;
X}
X
X/*
X * Apply a "bump" texture.
X */
Xvoid
XBumpApply(bump, prim, ray, pos, norm, gnorm, surf)
XBump *bump;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Vector disp;
X
X	DNoise3(pos, &disp);
X	norm->x += disp.x * bump->size;
X	norm->y += disp.y * bump->size;
X	norm->z += disp.z * bump->size;
X	(void)VecNormalize(norm);
X}
END_OF_FILE
if test 1213 -ne `wc -c <'libray/libtext/bump.c'`; then
    echo shar: \"'libray/libtext/bump.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/bump.c'
fi
if test -f 'libray/libtext/checker.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/checker.c'\"
else
echo shar: Extracting \"'libray/libtext/checker.c'\" \(1341 characters\)
sed "s/^X//" >'libray/libtext/checker.c' <<'END_OF_FILE'
X/*
X * checker.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: checker.c,v 4.0 91/07/17 14:41:48 kolb Exp Locker: kolb $
X *
X * $Log:	checker.c,v $
X * Revision 4.0  91/07/17  14:41:48  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "checker.h"
X
X/*
X * Create and return a reference to a "checker" texture.
X */
XChecker *
XCheckerCreate(surf)
XSurface *surf;
X{
X	Checker *checker;
X	checker = (Checker *)Malloc(sizeof(checker));
X	checker->surf = surf;
X	return checker;
X}
X
X/*
X * Apply a "checker" texture.
X */
Xvoid
XCheckerApply(checker, prim, ray, pos, norm, gnorm, surf)
XChecker *checker;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	int xp, yp, zp;
X
X	xp = pos->x > 0. ? pos->x : 1. - pos->x;
X	yp = pos->y > 0. ? pos->y : 1. - pos->y;
X	zp = pos->z > 0. ? pos->z : 1. - pos->z;
X
X	if ((xp + yp + zp) % 2)
X		*surf = *checker->surf;
X	/* else surface stays the same. */
X}
END_OF_FILE
if test 1341 -ne `wc -c <'libray/libtext/checker.c'`; then
    echo shar: \"'libray/libtext/checker.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/checker.c'
fi
if test -f 'libray/libtext/fbmbump.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/fbmbump.c'\"
else
echo shar: Extracting \"'libray/libtext/fbmbump.c'\" \(1284 characters\)
sed "s/^X//" >'libray/libtext/fbmbump.c' <<'END_OF_FILE'
X/*
X * fbmbump.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: fbmbump.c,v 4.0 91/07/17 14:42:21 kolb Exp Locker: kolb $
X *
X * $Log:	fbmbump.c,v $
X * Revision 4.0  91/07/17  14:42:21  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "fbm.h"
X#include "fbmbump.h"
X
XFBm *
XFBmBumpCreate(offset, scale, h, lambda, octaves)
XFloat offset, h, lambda, scale;
Xint octaves;
X{
X	FBm *fbm;
X	fbm = FBmCreate(offset, scale, h, lambda, octaves, 0., (char *)NULL);
X	return fbm;
X}
X
X/*ARGSUSED*/
Xvoid
XFBmBumpApply(fbm, prim, ray, pos, norm, gnorm, surf)
XFBm *fbm;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Vector disp;
X
X	VfBm(pos, fbm->omega, fbm->lambda, fbm->octaves, &disp);
X	norm->x += fbm->offset + disp.x * fbm->scale;
X	norm->y += fbm->offset + disp.y * fbm->scale;
X	norm->z += fbm->offset + disp.z * fbm->scale;
X}
END_OF_FILE
if test 1284 -ne `wc -c <'libray/libtext/fbmbump.c'`; then
    echo shar: \"'libray/libtext/fbmbump.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/fbmbump.c'
fi
if test -f 'libray/libtext/gloss.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/gloss.c'\"
else
echo shar: Extracting \"'libray/libtext/gloss.c'\" \(1477 characters\)
sed "s/^X//" >'libray/libtext/gloss.c' <<'END_OF_FILE'
X/*
X * gloss.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: gloss.c,v 4.0 91/07/17 14:42:30 kolb Exp Locker: kolb $
X *
X * $Log:	gloss.c,v $
X * Revision 4.0  91/07/17  14:42:30  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "gloss.h"
X
XGloss *
XGlossCreate(glossiness)
XFloat glossiness;
X{
X	Gloss *gloss;
X
X	gloss = (Gloss *)Malloc(sizeof(Gloss));
X	gloss->glossy = 1. - glossiness;
X	return gloss;
X}
X
Xvoid
XGlossApply(gloss, prim, ray, pos, norm, gnorm, surf)
XGloss *gloss;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Vector uaxis, vaxis, point, norminc;
X	extern void UnitCirclePoint();
X
X	/*
X	 * Find coordinate system with norm as the Z axis.
X	 */
X	VecCoordSys(norm, &uaxis, &vaxis);
X	/*
X	 * Find point on unit circle based on sample #.
X	 */
X	UnitCirclePoint(&point, ray->sample);
X	/*
X	 * Perturb normal appropriately.
X	 */
X	VecComb(gloss->glossy * point.x, uaxis,
X		gloss->glossy * point.y, vaxis,
X		&norminc);
X	VecAdd(*norm, norminc, norm);
X	/*
X	 * Renormalize.
X	 */
X	(void)VecNormalize(norm);
X}
END_OF_FILE
if test 1477 -ne `wc -c <'libray/libtext/gloss.c'`; then
    echo shar: \"'libray/libtext/gloss.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/gloss.c'
fi
if test -f 'libray/libtext/imagetext.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/imagetext.h'\"
else
echo shar: Extracting \"'libray/libtext/imagetext.h'\" \(1222 characters\)
sed "s/^X//" >'libray/libtext/imagetext.h' <<'END_OF_FILE'
X/*
X * imagetext.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: imagetext.h,v 4.0 91/07/17 14:42:47 kolb Exp Locker: kolb $
X *
X * $Log:	imagetext.h,v $
X * Revision 4.0  91/07/17  14:42:47  kolb
X * Initial version.
X * 
X */
X#ifndef IMAGETEXT_H
X#define IMAGETEXT_H
X
X#define TextImageCreate(s) TextCreate((TextRef)ImageTextCreate(s), \
X				ImageTextApply)
X
Xtypedef struct {
X	Image	*image;		/* image to use */
X	Surface *surf;		/* Alternative surface */
X	int	component,	/* component to texture */
X		smooth;		/* interpolate pixel values? */
X	Float	lo, hi;		/* high and low values in image */
X	Float	tileu, tilev;	/* tiling control */
X	Mapping	*mapping;
X} ImageText;
X
Xextern ImageText *ImageTextCreate();
Xextern void ImageTextApply(), ImageTextSetComponent();
X
X#endif /* IMAGETEXT_H */
END_OF_FILE
if test 1222 -ne `wc -c <'libray/libtext/imagetext.h'`; then
    echo shar: \"'libray/libtext/imagetext.h'\" unpacked with wrong size!
fi
# end of 'libray/libtext/imagetext.h'
fi
if test -f 'libray/libtext/marble.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/marble.c'\"
else
echo shar: Extracting \"'libray/libtext/marble.c'\" \(1558 characters\)
sed "s/^X//" >'libray/libtext/marble.c' <<'END_OF_FILE'
X/*
X * marble.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: marble.c,v 4.0 91/07/17 14:43:06 kolb Exp Locker: kolb $
X *
X * $Log:	marble.c,v $
X * Revision 4.0  91/07/17  14:43:06  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "marble.h"
X
XMarbleText *
XMarbleCreate(mapname)
Xchar *mapname;
X{
X	MarbleText *marble;
X
X	marble = (MarbleText *)Malloc(sizeof(MarbleText));
X	if (mapname)
X		marble->colormap = ColormapRead(mapname);
X	else
X		marble->colormap = (Color *)NULL;
X	return marble;
X}
X
Xvoid
XMarbleApply(marble, prim, ray, pos, norm, gnorm, surf)
XMarbleText *marble;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	Float val;
X	int index;
X
X	val = Marble(pos);
X	if (marble->colormap) {
X		index = (int)(255. * val);
X		surf->diff.r *= marble->colormap[index].r;
X		surf->diff.g *= marble->colormap[index].g;
X		surf->diff.b *= marble->colormap[index].b;
X		surf->amb.r *= marble->colormap[index].r;
X		surf->amb.g *= marble->colormap[index].g;
X		surf->amb.b *= marble->colormap[index].b;
X	} else {
X		ColorScale(val, surf->amb, &surf->amb);
X		ColorScale(val, surf->diff, &surf->diff);
X	}
X}
END_OF_FILE
if test 1558 -ne `wc -c <'libray/libtext/marble.c'`; then
    echo shar: \"'libray/libtext/marble.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/marble.c'
fi
if test -f 'libray/libtext/mount.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libray/libtext/mount.c'\"
else
echo shar: Extracting \"'libray/libtext/mount.c'\" \(1523 characters\)
sed "s/^X//" >'libray/libtext/mount.c' <<'END_OF_FILE'
X/*
X * mount.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: mount.c,v 4.0 91/07/17 14:43:17 kolb Exp Locker: kolb $
X *
X * $Log:	mount.c,v $
X * Revision 4.0  91/07/17  14:43:17  kolb
X * Initial version.
X * 
X */
X#include "texture.h"
X#include "mount.h"
X
X/*
X * Create and return a reference to a "mount" texture.
X */
XMount *
XMountCreate(cmap, turb, slope)
Xchar *cmap;
XFloat turb, slope;
X{
X	Mount *mount;
X
X	mount = (Mount *)Malloc(sizeof(Mount));
X	mount->turb = turb;
X	mount->slope = slope;
X	mount->cmap = ColormapRead(cmap);
X	return mount;
X}
X
X/*
X * Apply a "mount" texture.
X */
Xvoid
XMountApply(mount, prim, ray, pos, norm, gnorm, surf)
XMount *mount;
XGeom *prim;
XRay *ray;
XVector *pos, *norm, *gnorm;
XSurface *surf;
X{
X	int index;
X	Float t;
X	Color c;
X
X	t = Chaos(pos, 7);
X	index = (pos->z + mount->turb*t - mount->slope*(1.-norm->z))*256;
X	if (index < 0)
X		index = 0;
X	if (index > 255)
X		index = 255;
X
X	ColorMultiply(surf->amb, mount->cmap[index], &surf->amb);
X	ColorMultiply(surf->diff, mount->cmap[index], &surf->diff);
X	ColorMultiply(surf->spec, mount->cmap[index], &surf->spec);
X}
END_OF_FILE
if test 1523 -ne `wc -c <'libray/libtext/mount.c'`; then
    echo shar: \"'libray/libtext/mount.c'\" unpacked with wrong size!
fi
# end of 'libray/libtext/mount.c'
fi
if test -f 'libshade/builtin.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libshade/builtin.c'\"
else
echo shar: Extracting \"'libshade/builtin.c'\" \(1383 characters\)
sed "s/^X//" >'libshade/builtin.c' <<'END_OF_FILE'
X/*
X * builtin.c
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb, Rod G. Bogart
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: builtin.c,v 4.0 91/07/17 14:45:00 kolb Exp Locker: kolb $
X *
X * $Log:	builtin.c,v $
X * Revision 4.0  91/07/17  14:45:00  kolb
X * Initial version.
X * 
X */
X
X#include "rayshade.h"
X
XFloat
XSumExpr(a, b)
XFloat a, b;
X{
X	return a + b;
X}
XFloat
XDiffExpr(a, b)
XFloat a, b;
X{
X	return a - b;
X}
X
XFloat
XMultExpr(a, b)
XFloat a, b;
X{
X	return a * b;
X}
XFloat
XDivideExpr(a, b)
XFloat a, b;
X{
X	return a / b;
X}
X
XFloat
XModExpr(a, b)
XFloat a, b;
X{
X	return (Float)((int)a % (int)b);
X}
X
XFloat
XNegateExpr(a)
XFloat a;
X{
X	return -a;
X}
X
XFloat
XLinearTime(starttime, startval, endtime, endval)
XFloat starttime, endtime, startval, endval;
X{
X	if (TimeExpr->value < starttime)
X		return startval;
X	if (TimeExpr->value > endtime)
X		return endval;
X	if (equal(endtime, starttime))
X		return startval;
X	return startval + (endval - startval) * 
X		(TimeExpr->value - starttime) / (endtime - starttime);
X}
END_OF_FILE
if test 1383 -ne `wc -c <'libshade/builtin.c'`; then
    echo shar: \"'libshade/builtin.c'\" unpacked with wrong size!
fi
# end of 'libshade/builtin.c'
fi
if test -f 'libshade/stats.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libshade/stats.h'\"
else
echo shar: Extracting \"'libshade/stats.h'\" \(1395 characters\)
sed "s/^X//" >'libshade/stats.h' <<'END_OF_FILE'
X/*
X * stats.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: stats.h,v 4.0 91/07/17 14:47:46 kolb Exp Locker: kolb $
X *
X * $Log:	stats.h,v $
X * Revision 4.0  91/07/17  14:47:46  kolb
X * Initial version.
X * 
X */
X#ifndef STATS_H
X#define STATS_H
X
X/*
X * Statistics
X */
Xtypedef struct RSStats {
X	unsigned long	EyeRays,	/* # of eye rays spawned */
X			ShadowRays,	/* # of shadow rays spawned */
X			ReflectRays,	/* # of reflected rays */
X			RefractRays,	/* # of refracted rays */
X			HitRays,	/* # of rays that hit something. */
X			BVTests,	/* # of bounding volume tests. */
X			SuperSampled,	/* # of supersampled pixels. */
X			ShadowHits,	/* # of shadow ray hits */
X			CacheHits,	/* # of shadow cache hits */
X			CacheMisses;	/* # of shadow cache misses */
X	Float		Utime,		/* User time */
X			Stime;		/* System time */
X	FILE		*fstats;	/* Stats/info file pointer. */
X} RSStats;
X
Xextern RSStats Stats;
Xextern void StatsPrint(), StatsAddRep();
X
X#endif /* STATS_H */
END_OF_FILE
if test 1395 -ne `wc -c <'libshade/stats.h'`; then
    echo shar: \"'libshade/stats.h'\" unpacked with wrong size!
fi
# end of 'libshade/stats.h'
fi
if test -f 'libshade/symtab.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libshade/symtab.h'\"
else
echo shar: Extracting \"'libshade/symtab.h'\" \(1180 characters\)
sed "s/^X//" >'libshade/symtab.h' <<'END_OF_FILE'
X/*
X * symtab.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb, Rod G. Bogart
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X * 
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: symtab.h,v 4.0 91/07/17 14:48:12 kolb Exp Locker: kolb $
X *
X * $Log:	symtab.h,v $
X * Revision 4.0  91/07/17  14:48:12  kolb
X * Initial version.
X * 
X */
X
X#ifndef SYMTAB_H
X#define SYMTAB_H
X
Xtypedef Float (*FloatFuncPtr)();
X
Xstruct SymtabPredefinedEntry {
X	char * name;
X	Float f;
X	FloatFuncPtr fp;
X	int type;
X	int timevary;
X	int params;
X};
X
Xtypedef	union {
X	Float (*fp)();
X	Expr *expr;
X} SymtabValue;
X
Xtypedef struct SymtabEntry {
X	char 	*name;
X	SymtabValue value;
X	int type;
X	int timevary;
X	int params;
X	struct SymtabEntry *next;
X} SymtabEntry;
X
Xextern Expr *ExprFloatSymtabFind();
Xextern SymtabEntry *SymtabFind(), *SymtabBuiltinFind();
X
X#endif /* SYMTAB_H */
END_OF_FILE
if test 1180 -ne `wc -c <'libshade/symtab.h'`; then
    echo shar: \"'libshade/symtab.h'\" unpacked with wrong size!
fi
# end of 'libshade/symtab.h'
fi
if test -f 'libshade/viewing.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'libshade/viewing.h'\"
else
echo shar: Extracting \"'libshade/viewing.h'\" \(1564 characters\)
sed "s/^X//" >'libshade/viewing.h' <<'END_OF_FILE'
X/*
X * viewing.h
X *
X * Copyright (C) 1989, 1991, Craig E. Kolb
X * All rights reserved.
X *
X * This software may be freely copied, modified, and redistributed
X * provided that this copyright notice is preserved on all copies.
X *
X * You may not distribute this software, in whole or in part, as part of
X * any commercial product without the express consent of the authors.
X *
X * There is no warranty or other guarantee of fitness of this software
X * for any purpose.  It is provided solely "as is".
X *
X * $Id: viewing.h,v 4.0 91/07/17 14:48:26 kolb Exp Locker: kolb $
X *
X * $Log:	viewing.h,v $
X * Revision 4.0  91/07/17  14:48:26  kolb
X * Initial version.
X * 
X */
X#ifndef VIEWING_H
X#define VIEWING_H
X
X/*
X * Screen
X */
Xtypedef struct RSScreen {
X	int	xres, yres,		/* Resolution of entire screen */
X		xsize, ysize,		/* Resolution of window */
X		minx, miny, maxx, maxy; /* Window to be rendered */
X	Vector	scrnx, scrny,		/* Horizontal & vertical screen axes */
X		scrni, scrnj,		/* Normalized versions of the above */
X		firstray;		/* Direction from eye to screen UL  */
X	Color	background;		/* Background color */
X} RSScreen;
X
X/*
X * Camera
X */
Xtypedef struct {
X	Vector	pos,			/* Eye position */
X		lookp,			/* Look position */
X		dir,			/* Look direction */
X		up;			/* 'Up' vector */
X	Float	hfov, vfov,		/* Horizontal/vertical field of view */
X		lookdist,		/* Eye pos/look pos distance */
X		aperture,		/* Aperture width (0 == pinhole) */
X		focaldist;		/* Distance from eye to focal plane */
X} RSCamera;
X
Xextern RSScreen Screen;
Xextern RSCamera Camera;
X
X#endif /* VIEWING_H */
END_OF_FILE
if test 1564 -ne `wc -c <'libshade/viewing.h'`; then
    echo shar: \"'libshade/viewing.h'\" unpacked with wrong size!
fi
# end of 'libshade/viewing.h'
fi
echo shar: End of archive 3 \(of 19\).
cp /dev/null ark3isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 19 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
