ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/srcsupp.c
(Generate patch)

Comparing ray/src/rt/srcsupp.c (file contents):
Revision 2.6 by greg, Fri Aug 28 15:10:47 1992 UTC vs.
Revision 2.12 by greg, Wed Dec 31 01:50:02 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1992 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  Support routines for source objects and materials
6 + *
7 + *  External symbols declared in source.h
8   */
9  
10 + #include "copyright.h"
11 +
12   #include  "ray.h"
13  
14   #include  "otypes.h"
# Line 18 | Line 19 | static char SCCSid[] = "$SunId$ LBL";
19  
20   #include  "face.h"
21  
22 < #define SRCINC          4               /* realloc increment for array */
22 > #define SRCINC          8               /* realloc increment for array */
23  
24   SRCREC  *source = NULL;                 /* our list of sources */
25   int  nsources = 0;                      /* the number of sources */
# Line 26 | Line 27 | int  nsources = 0;                     /* the number of sources */
27   SRCFUNC  sfun[NUMOTYPE];                /* source dispatch table */
28  
29  
30 + void
31   initstypes()                    /* initialize source dispatch table */
32   {
33          extern VSMATERIAL  mirror_vs, direct1_vs, direct2_vs;
32        extern int  fsetsrc(), ssetsrc(), sphsetsrc(), cylsetsrc(), rsetsrc();
33        extern int  nopart(), flatpart(), cylpart();
34        extern double  fgetplaneq(), rgetplaneq();
35        extern double  fgetmaxdisk(), rgetmaxdisk();
34          static SOBJECT  fsobj = {fsetsrc, flatpart, fgetplaneq, fgetmaxdisk};
35          static SOBJECT  ssobj = {ssetsrc, nopart};
36          static SOBJECT  sphsobj = {sphsetsrc, nopart};
# Line 56 | Line 54 | newsource()                    /* allocate new source in our array */
54          if (nsources == 0)
55                  source = (SRCREC *)malloc(SRCINC*sizeof(SRCREC));
56          else if (nsources%SRCINC == 0)
57 <                source = (SRCREC *)realloc((char *)source,
57 >                source = (SRCREC *)realloc((void *)source,
58                                  (unsigned)(nsources+SRCINC)*sizeof(SRCREC));
59          if (source == NULL)
60                  return(-1);
61          source[nsources].sflags = 0;
62          source[nsources].nhits = 1;
63          source[nsources].ntests = 2;    /* initial hit probability = 1/2 */
64 + #if SHADCACHE
65 +        source[nsources].obscache = NULL;
66 + #endif
67          return(nsources++);
68   }
69  
70  
71 + void
72   setflatss(src)                          /* set sampling for a flat source */
73   register SRCREC  *src;
74   {
# Line 86 | Line 88 | register SRCREC  *src;
88   }
89  
90  
91 + void
92   fsetsrc(src, so)                        /* set a face as a source */
93   register SRCREC  *src;
94   OBJREC  *so;
# Line 119 | Line 122 | OBJREC  *so;
122          }
123          src->srad = sqrt(src->srad);
124                                                  /* compute size vectors */
125 <        if (f->nv == 4 || (f->nv == 5 &&        /* parallelogram case */
123 <                        dist2(VERTEX(f,0),VERTEX(f,4)) <= FTINY*FTINY))
125 >        if (f->nv == 4)                         /* parallelogram case */
126                  for (j = 0; j < 3; j++) {
127                          src->ss[SU][j] = .5*(VERTEX(f,1)[j]-VERTEX(f,0)[j]);
128                          src->ss[SV][j] = .5*(VERTEX(f,3)[j]-VERTEX(f,0)[j]);
# Line 130 | Line 132 | OBJREC  *so;
132   }
133  
134  
135 + void
136   ssetsrc(src, so)                        /* set a source as a source */
137   register SRCREC  *src;
138   register OBJREC  *so;
# Line 156 | Line 159 | register OBJREC  *so;
159   }
160  
161  
162 + void
163   sphsetsrc(src, so)                      /* set a sphere as a source */
164   register SRCREC  *src;
165   register OBJREC  *so;
# Line 178 | Line 182 | register OBJREC  *so;
182   }
183  
184  
185 + void
186   rsetsrc(src, so)                        /* set a ring (disk) as a source */
187   register SRCREC  *src;
188   OBJREC  *so;
# Line 199 | Line 204 | OBJREC  *so;
204   }
205  
206  
207 + void
208   cylsetsrc(src, so)                      /* set a cylinder as a source */
209   register SRCREC  *src;
210   OBJREC  *so;
# Line 252 | Line 258 | register OBJREC  *m;
258   }
259  
260  
261 < spotout(r, s, dist)             /* check if we're outside spot region */
261 > int
262 > spotout(r, s)                   /* check if we're outside spot region */
263   register RAY  *r;
264   register SPOT  *s;
258 int  dist;
265   {
266          double  d;
267          FVECT  vd;
268          
269          if (s == NULL)
270                  return(0);
271 <        if (dist) {                     /* distant source */
271 >        if (s->flen < -FTINY) {         /* distant source */
272                  vd[0] = s->aim[0] - r->rorg[0];
273                  vd[1] = s->aim[1] - r->rorg[1];
274                  vd[2] = s->aim[2] - r->rorg[2];
# Line 353 | Line 359 | OBJREC  *op;
359   }
360  
361  
362 + int
363   commonspot(sp1, sp2, org)       /* set sp1 to intersection of sp1 and sp2 */
364   register SPOT  *sp1, *sp2;
365   FVECT  org;
# Line 376 | Line 383 | FVECT  org;
383   }
384  
385  
386 + int
387   commonbeam(sp1, sp2, dir)       /* set sp1 to intersection of sp1 and sp2 */
388   register SPOT  *sp1, *sp2;
389   FVECT  dir;
# Line 400 | Line 408 | FVECT  dir;
408   }
409  
410  
411 + int
412   checkspot(sp, nrm)              /* check spotlight for behind source */
413   register SPOT  *sp;     /* spotlight */
414   FVECT  nrm;             /* source surface normal */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines