home *** CD-ROM | disk | FTP | other *** search
/ Altsys Virtuoso 2.0K / virtuoso_20k.iso / DemoApps / Graphics / Viewers / raytracers / ohta / Source / ray.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-08  |  2.1 KB  |  116 lines

  1. #define    MAXOBJECTS    1010
  2. #define    MAXLEVEL    4
  3.  
  4. #define    MINT    1e-6
  5.  
  6. struct point {double x,y,z;};
  7.  
  8. struct vector {double x,y,z;};
  9.  
  10. struct circle {
  11.     struct vector o;
  12.     double c,s;
  13. };
  14.  
  15. struct ray {
  16.     int obj;        /* origin index */
  17.     struct point a;        /* origin coordinate */
  18.     struct vector l;    /* direction */
  19. };
  20.  
  21. struct color {double r,g,b;};
  22.  
  23. struct intersect {
  24.     int obj;
  25.     double t;
  26.     struct vector n;
  27. } intersect();
  28.  
  29. struct object {
  30.     int flags;
  31.     struct point center;
  32.     double radius;
  33.     struct intersect (*shape)();
  34.     double *spparams;
  35.     struct color (*shade)();
  36.     double *sdparams;
  37. } objects[MAXOBJECTS];
  38.  
  39. #define    EYE        1        /* object is eye */
  40. #define    LIGHT        2        /* object is light source */
  41. #define    REFLECT        4        /* object is reflective */
  42. #define    REFRACT        8        /* object is refractive */
  43. #define    RAYORIGIN    (EYE|LIGHT|REFLECT|REFRACT)
  44. #define    SELF        16        /* rays from an object may */
  45.                     /* intersect the object again */
  46.  
  47. extern int res;
  48. extern int maxobj,lights;
  49.  
  50. struct objlist2 {
  51.     int obj;
  52.     struct objlist *next;
  53. };
  54.  
  55. struct objlist {
  56.     int obj;
  57.     struct objlist *next;
  58.     float t;
  59. }
  60.     ***candidates;
  61.  
  62. struct dirlist {
  63.     int dir;
  64.     struct dirlist *next;
  65. };
  66.  
  67. extern struct vector nilvect,normalize(),reflect(),refract();
  68. extern struct color trace(),bgcolor();
  69.  
  70. extern int fflag,dflag,aflag,tflag,sflag,oflag;
  71.  
  72. extern int alsize;
  73.  
  74. /* This should be modified to be word alignment of alloc macro
  75.  *    0x1    for 2 byte alignment
  76.  *    0x3    for 4 byte alignment
  77.  */
  78. #define    ALMASK    0x1
  79.  
  80. extern char *myalloc(),*freep,*endp;
  81. extern char *malloc();
  82.  
  83. #define alloc(type)    ((alsize=(sizeof(type)+ALMASK)&~ALMASK),\
  84.              (type *) (endp>freep+alsize\
  85.                  ?(freep+=alsize)-alsize\
  86.                  :myalloc(alsize)))
  87.  
  88. #define nalloc(type,n)    ((alsize=(sizeof(type)*(n)+ALMASK)&~ALMASK),\
  89.              (type *) (endp>freep+alsize\
  90.                  ?(freep+=alsize)-alsize\
  91.                  :myalloc(alsize)))
  92.  
  93. extern int raycount,shadowcount;
  94.  
  95. extern int NRECTS,DIRECTIONS;
  96.  
  97. struct shapetab {
  98.     void (*shapeinitfunc)();
  99.     struct intersect (*shapefunc)();
  100.     int nparams;
  101. }
  102.     *shapetab;
  103.  
  104. extern int nshapetab;
  105.  
  106. struct shadetab {
  107.     void (*shadeinitfunc)();
  108.     struct color (*shadefunc)();
  109.     int nparams;
  110. }
  111.     *shadetab;
  112.  
  113. extern int nshadetab;
  114.  
  115. extern double fovf;
  116.