home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / NEWS / RADIANCE / SRC / RT / RAY.H < prev    next >
C/C++ Source or Header  |  1993-10-07  |  2KB  |  65 lines

  1. /* Copyright (c) 1992 Regents of the University of California */
  2.  
  3. /* SCCSid "@(#)ray.h 2.2 1/4/92 LBL" */
  4.  
  5. /*
  6.  *  ray.h - header file for routines using rays.
  7.  *
  8.  *     8/7/85
  9.  */
  10.  
  11. #include  "standard.h"
  12.  
  13. #include  "object.h"
  14.  
  15. #include  "color.h"
  16.  
  17.                 /* ray type flags */
  18. #define  PRIMARY    01        /* original ray */
  19. #define  SHADOW        02        /* ray to light source */
  20. #define  REFLECTED    04        /* reflected ray */
  21. #define  REFRACTED    010        /* refracted (bent) ray */
  22. #define  TRANS        020        /* transmitted/transferred ray */
  23. #define  AMBIENT    040        /* ray scattered for interreflection */
  24. #define  SPECULAR    0100        /* ray scattered for specular */
  25.  
  26.                 /* reflected ray types */
  27. #define  RAYREFL    (SHADOW|REFLECTED|AMBIENT|SPECULAR)
  28.  
  29. typedef struct ray {
  30.     long  rno;        /* unique ray number */
  31.     int  rlvl;        /* number of reflections for this ray */
  32.     float  rweight;        /* cumulative weight of this ray */
  33.     short  rtype;        /* ray type */
  34.     short  crtype;        /* cumulative ray type */
  35.     struct ray  *parent;    /* ray this originated from */
  36.     FVECT  rorg;        /* origin of ray */
  37.     FVECT  rdir;        /* normalized direction of ray */
  38.     int  rsrc;        /* source we're aiming for */
  39.     OBJECT  *clipset;    /* set of objects currently clipped */
  40.     OBJECT  *newcset;    /* next clipset, used for transmission */
  41.     int  (*revf)();        /* evaluation function for this ray */
  42.      OBJREC  *ro;        /* intersected object */
  43.     double  rot;        /* distance to object */
  44.     FVECT  rop;        /* intersection point */
  45.     FVECT  ron;        /* intersection surface normal */
  46.     double  rod;        /* -DOT(rdir, ron) */
  47.     FULLXF  *rox;        /* object transformation */
  48.     FVECT  pert;        /* surface normal perturbation */
  49.     COLOR  pcol;        /* pattern color */
  50.     COLOR  rcol;        /* returned ray value */
  51.     double  rt;        /* returned effective ray length */
  52. }  RAY;
  53.  
  54. extern int  raytrace();
  55.  
  56. extern double  raynormal();
  57.  
  58. extern int  dimlist[];        /* dimension list for distribution */
  59. extern int  ndims;        /* number of dimensions so far */
  60. extern int  samplendx;        /* index for this sample */
  61.  
  62. #define  MAXDIM        32    /* maximum number of dimensions */
  63.  
  64. #define  rayvalue(r)    (*(r)->revf)(r)
  65.