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

Comparing ray/src/rt/rtrace.c (file contents):
Revision 2.15 by greg, Fri Jun 18 10:14:42 1993 UTC vs.
Revision 2.24 by gregl, Wed Jul 9 11:25:49 1997 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1992 Regents of the University of California */
1 > /* Copyright (c) 1997 Silicon Graphics, Inc. */
2  
3   #ifndef lint
4 < static char SCCSid[] = "$SunId$ LBL";
4 > static char SCCSid[] = "$SunId$ SGI";
5   #endif
6  
7   /*
# Line 53 | Line 53 | int  vresolu = 0;                      /* vertical resolution */
53   double  dstrsrc = 0.0;                  /* square source distribution */
54   double  shadthresh = .05;               /* shadow threshold */
55   double  shadcert = .5;                  /* shadow certainty */
56 < int  directrelay = 1;                   /* number of source relays */
56 > int  directrelay = 2;                   /* number of source relays */
57   int  vspretest = 512;                   /* virtual source pretest density */
58   int  directvis = 1;                     /* sources visible? */
59 < double  srcsizerat = .25;               /* maximum ratio source size/dist. */
59 > double  srcsizerat = .2;                /* maximum ratio source size/dist. */
60  
61 + COLOR  cextinction = BLKCOLOR;          /* global extinction coefficient */
62 + COLOR  salbedo = BLKCOLOR;              /* global scattering albedo */
63 + double  seccg = 0.;                     /* global scattering eccentricity */
64 + double  ssampdist = 0.;                 /* scatter sampling distance */
65 +
66   double  specthresh = .15;               /* specular sampling threshold */
67   double  specjitter = 1.;                /* specular sampling jitter */
68  
69 + int  backvis = 1;                       /* back face visibility */
70 +
71   int  maxdepth = 6;                      /* maximum recursion depth */
72   double  minweight = 4e-3;               /* minimum ray weight */
73  
74   COLOR  ambval = BLKCOLOR;               /* ambient value */
75 + int  ambvwt = 0;                        /* initial weight for ambient value */
76   double  ambacc = 0.2;                   /* ambient accuracy */
77 < int  ambres = 32;                       /* ambient resolution */
78 < int  ambdiv = 128;                      /* ambient divisions */
77 > int  ambres = 128;                      /* ambient resolution */
78 > int  ambdiv = 512;                      /* ambient divisions */
79   int  ambssamp = 0;                      /* ambient super-samples */
80   int  ambounce = 0;                      /* ambient bounces */
81   char  *amblist[128];                    /* ambient include/exclude list */
# Line 133 | Line 141 | char  *fname;
141                  setmode(fileno(fp), O_BINARY);
142   #endif
143                                          /* set up output */
144 <        if (imm_irrad)
137 <                outvals = "v";
138 <        else
139 <                setoutput(outvals);
144 >        setoutput(outvals);
145          switch (outform) {
146          case 'a': putreal = puta; break;
147          case 'f': putreal = putf; break;
# Line 158 | Line 163 | char  *fname;
163                          getvec(direc, inform, fp) == 0) {
164  
165                  if (normalize(direc) == 0.0) {          /* zero ==> flush */
166 <                        fflush(stdout);
167 <                        continue;
168 <                }
169 <                samplendx++;
166 >                        bogusray();
167 >                        if (--nextflush <= 0) {
168 >                                fflush(stdout);
169 >                                nextflush = hresolu;
170 >                        }
171 >                } else {
172 >                        samplendx++;
173                                                          /* compute and print */
174 <                if (imm_irrad)
175 <                        irrad(orig, direc);
176 <                else
177 <                        traceray(orig, direc);
174 >                        if (imm_irrad)
175 >                                irrad(orig, direc);
176 >                        else
177 >                                rad(orig, direc);
178                                                          /* flush if time */
179 <                if (--nextflush == 0) {
180 <                        fflush(stdout);
181 <                        nextflush = hresolu;
179 >                        if (--nextflush == 0) {
180 >                                fflush(stdout);
181 >                                nextflush = hresolu;
182 >                        }
183                  }
184                  if (ferror(stdout))
185                          error(SYSTEM, "write error");
# Line 241 | Line 250 | register char  *vs;
250   }
251  
252  
253 < traceray(org, dir)              /* compute and print ray value(s) */
245 < FVECT  org, dir;
253 > bogusray()                      /* print out empty record */
254   {
255 <        register int  (**tp)();
255 >        thisray.rorg[0] = thisray.rorg[1] = thisray.rorg[2] =
256 >        thisray.rdir[0] = thisray.rdir[1] = thisray.rdir[2] = 0.0;
257 >        rayorigin(&thisray, NULL, PRIMARY, 1.0);
258 >        printvals(&thisray);
259 > }
260  
261 +
262 + rad(org, dir)                   /* compute and print ray value(s) */
263 + FVECT  org, dir;
264 + {
265          VCOPY(thisray.rorg, org);
266          VCOPY(thisray.rdir, dir);
267 +        thisray.rmax = 0.0;
268          rayorigin(&thisray, NULL, PRIMARY, 1.0);
269          if (castonly)
270                  localhit(&thisray, &thescene) || sourcehit(&thisray);
271          else
272                  rayvalue(&thisray);
273 <
257 <        if (ray_out[0] == NULL)
258 <                return;
259 <        for (tp = ray_out; *tp != NULL; tp++)
260 <                (**tp)(&thisray);
261 <        if (outform == 'a')
262 <                putchar('\n');
273 >        printvals(&thisray);
274   }
275  
276  
# Line 274 | Line 285 | FVECT  org, dir;
285          }
286          rayorigin(&thisray, NULL, PRIMARY, 1.0);
287                                          /* pretend we hit surface */
288 <        thisray.rot = 1.0;
288 >        thisray.rot = 1.0-1e-4;
289          thisray.rod = 1.0;
290          VCOPY(thisray.ron, dir);
291          for (i = 0; i < 3; i++)         /* fudge factor */
292                  thisray.rop[i] = org[i] + 1e-4*dir[i];
293                                          /* compute and print */
294          (*ofun[Lamb.otype].funp)(&Lamb, &thisray);
295 <        oputv(&thisray);
295 >        printvals(&thisray);
296 > }
297 >
298 >
299 > printvals(r)                    /* print requested ray values */
300 > RAY  *r;
301 > {
302 >        register int  (**tp)();
303 >
304 >        if (ray_out[0] == NULL)
305 >                return;
306 >        for (tp = ray_out; *tp != NULL; tp++)
307 >                (**tp)(r);
308          if (outform == 'a')
309                  putchar('\n');
310   }
# Line 354 | Line 377 | RAY  *r;
377  
378          if (every_out[0] == NULL)
379                  return;
380 <        if (traincl == 1 && r->ro == NULL)
380 >        if (r->ro == NULL) {
381 >                if (traincl == 1)
382 >                        return;
383 >        } else if (traincl != -1 && traincl != inset(traset, r->ro->omod))
384                  return;
359        if (traincl != -1 && traincl != inset(traset, r->ro->omod))
360                return;
385          tabin(r);
386          for (tp = every_out; *tp != NULL; tp++)
387                  (**tp)(r);
# Line 507 | Line 531 | oputm(r)                               /* print modifier */
531   register RAY  *r;
532   {
533          if (r->ro != NULL)
534 <                fputs(objptr(r->ro->omod)->oname, stdout);
534 >                if (r->ro->omod != OVOID)
535 >                        fputs(objptr(r->ro->omod)->oname, stdout);
536 >                else
537 >                        fputs(VOIDID, stdout);
538          else
539                  putchar('*');
540          putchar('\t');

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines