--- ray/src/rt/ray.h 1991/05/23 08:12:57 1.5 +++ ray/src/rt/ray.h 1992/01/04 19:53:55 2.2 @@ -1,4 +1,4 @@ -/* Copyright (c) 1990 Regents of the University of California */ +/* Copyright (c) 1992 Regents of the University of California */ /* SCCSid "$SunId$ LBL" */ @@ -21,9 +21,10 @@ #define REFRACTED 010 /* refracted (bent) ray */ #define TRANS 020 /* transmitted/transferred ray */ #define AMBIENT 040 /* ray scattered for interreflection */ +#define SPECULAR 0100 /* ray scattered for specular */ /* reflected ray types */ -#define RAYREFL (SHADOW|REFLECTED|AMBIENT) +#define RAYREFL (SHADOW|REFLECTED|AMBIENT|SPECULAR) typedef struct ray { long rno; /* unique ray number */ @@ -37,6 +38,7 @@ typedef struct ray { int rsrc; /* source we're aiming for */ OBJECT *clipset; /* set of objects currently clipped */ OBJECT *newcset; /* next clipset, used for transmission */ + int (*revf)(); /* evaluation function for this ray */ OBJREC *ro; /* intersected object */ double rot; /* distance to object */ FVECT rop; /* intersection point */ @@ -49,10 +51,14 @@ typedef struct ray { double rt; /* returned effective ray length */ } RAY; +extern int raytrace(); + extern double raynormal(); extern int dimlist[]; /* dimension list for distribution */ extern int ndims; /* number of dimensions so far */ extern int samplendx; /* index for this sample */ -#define MAXDIM 16 /* maximum number of dimensions */ +#define MAXDIM 32 /* maximum number of dimensions */ + +#define rayvalue(r) (*(r)->revf)(r)