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

Comparing ray/src/rt/raycalls.c (file contents):
Revision 2.12 by greg, Mon Jun 13 20:07:56 2005 UTC vs.
Revision 2.24 by greg, Thu Apr 18 23:58:22 2019 UTC

# Line 90 | Line 90 | static const char      RCSid[] = "$Id$";
90   */
91  
92   #include <string.h>
93 + #include <time.h>
94  
95   #include  "ray.h"
96   #include  "source.h"
97 + #include  "bsdf.h"
98   #include  "ambient.h"
99   #include  "otypes.h"
100   #include  "random.h"
101   #include  "data.h"
102   #include  "font.h"
103 + #include  "pmapray.h"
104  
105   char    *progname = "unknown_app";      /* caller sets to argv[0] */
106  
# Line 118 | Line 121 | void   (*addobjnotify[8])() = {ambnotify, NULL};
121  
122   int     do_irrad = 0;                   /* compute irradiance? */
123  
124 + int     rand_samp = 1;                  /* pure Monte Carlo sampling? */
125 +
126   double  dstrsrc = 0.0;                  /* square source distribution */
127   double  shadthresh = .03;               /* shadow threshold */
128   double  shadcert = .75;                 /* shadow certainty */
# Line 136 | Line 141 | double specjitter = 1.;                /* specular sampling jitter *
141  
142   int     backvis = 1;                    /* back face visibility */
143  
144 < int     maxdepth = 8;                   /* maximum recursion depth */
144 > int     maxdepth = -10;                 /* maximum recursion depth */
145   double  minweight = 2e-3;               /* minimum ray weight */
146  
147   char    *ambfile = NULL;                /* ambient file name */
# Line 151 | Line 156 | char   *amblist[AMBLLEN+1];            /* ambient include/exclude
156   int     ambincl = -1;                   /* include == 1, exclude == 0 */
157  
158  
159 < extern void
159 > void
160   ray_init(                       /* initialize ray-tracing calculation */
161          char    *otnm
162   )
# Line 162 | Line 167 | ray_init(                      /* initialize ray-tracing calculation */
167          if (ofun[OBJ_SPHERE].funp == o_default)
168                  initotypes();
169                                          /* initialize urand */
170 <        initurand(2048);
170 >        if (rand_samp) {
171 >                srandom((long)time(0));
172 >                initurand(0);
173 >        } else {
174 >                srandom(0L);
175 >                initurand(2048);
176 >        }
177                                          /* read scene octree */
178          readoct(octname = otnm, ~(IO_FILES|IO_INFO), &thescene, NULL);
179          nsceneobjs = nobjects;
180 +                                        /* PMAP: Init & load photon maps */
181 +        ray_init_pmap();
182                                          /* find and mark sources */
183          marksources();
184                                          /* initialize ambient calculation */
185          setambient();
186 <                                        /* ready to go... */
186 >                                        /* ready to go... (almost) */
187   }
188  
189 < extern void
189 > void
190   ray_trace(                      /* trace a primary ray */
191          RAY     *r
192   )
193   {
194          rayorigin(r, PRIMARY, NULL, NULL);
195 <        samplendx = rand_samp ? random() : samplendx+1;
195 >        samplendx++;
196          rayvalue(r);            /* assumes origin and direction are set */
197   }
198  
199  
200 < extern void
200 > void
201   ray_done(               /* free ray-tracing data */
202          int     freall
203   )
# Line 198 | Line 211 | ray_done(              /* free ray-tracing data */
211          octdone();
212          thescene.cutree = EMPTY;
213          octname = NULL;
214 +        retainfonts = 0;
215          if (freall) {
202                retainfonts = 0;
216                  freefont(NULL);
217                  freedata(NULL);
218 +                SDfreeCache(NULL);
219                  initurand(0);
220          }
221          if (nobjects > 0) {
222                  sprintf(errmsg, "%ld objects left after call to ray_done()",
223 <                                nobjects);
223 >                                (long)nobjects);
224                  error(WARNING, errmsg);
225          }
226 +        
227 +        ray_done_pmap();
228   }
229  
230  
231 < extern void
231 > void
232   ray_save(                       /* save current parameter settings */
233          RAYPARAMS       *rp
234   )
# Line 222 | Line 238 | ray_save(                      /* save current parameter settings */
238          if (rp == NULL)
239                  return;
240          rp->do_irrad = do_irrad;
241 +        rp->rand_samp = rand_samp;
242          rp->dstrsrc = dstrsrc;
243          rp->shadthresh = shadthresh;
244          rp->shadcert = shadcert;
# Line 238 | Line 255 | ray_save(                      /* save current parameter settings */
255          rp->backvis = backvis;
256          rp->maxdepth = maxdepth;
257          rp->minweight = minweight;
241        copycolor(rp->ambval, ambval);
242        memset(rp->ambfile, '\0', sizeof(rp->ambfile));
258          if (ambfile != NULL)
259                  strncpy(rp->ambfile, ambfile, sizeof(rp->ambfile)-1);
260 +        else
261 +                memset(rp->ambfile, '\0', sizeof(rp->ambfile));
262 +        copycolor(rp->ambval, ambval);
263          rp->ambvwt = ambvwt;
264          rp->ambacc = ambacc;
265          rp->ambres = ambres;
# Line 256 | Line 274 | ray_save(                      /* save current parameter settings */
274                  if (ndx+len >= sizeof(rp->amblval))
275                          break;
276                  strcpy(rp->amblval+ndx, amblist[i]);
277 +                rp->amblndx[i] = ndx;
278                  ndx += len+1;
279          }
280          while (i <= AMBLLEN)
281                  rp->amblndx[i++] = -1;
282 +                
283 +        /* PMAP: save photon mapping params */
284 +        ray_save_pmap(rp);
285   }
286  
287  
288 < extern void
288 > void
289   ray_restore(                    /* restore parameter settings */
290          RAYPARAMS       *rp
291   )
# Line 278 | Line 300 | ray_restore(                   /* restore parameter settings */
300          }
301                                          /* restore saved settings */
302          do_irrad = rp->do_irrad;
303 +        rand_samp = rp->rand_samp;
304          dstrsrc = rp->dstrsrc;
305          shadthresh = rp->shadthresh;
306          shadcert = rp->shadcert;
# Line 328 | Line 351 | ray_restore(                   /* restore parameter settings */
351                  ambres = rp->ambres;
352                  ambacc = rp->ambacc;
353          }
354 +        
355 +        /* PMAP: restore photon mapping params */
356 +        ray_restore_pmap(rp);
357   }
358  
359  
360 < extern void
360 > void
361   ray_defaults(           /* get default parameter values */
362          RAYPARAMS       *rp
363   )
# Line 342 | Line 368 | ray_defaults(          /* get default parameter values */
368                  return;
369  
370          rp->do_irrad = 0;
371 +        rp->rand_samp = 1;
372          rp->dstrsrc = 0.0;
373          rp->shadthresh = .03;
374          rp->shadcert = .75;
# Line 356 | Line 383 | ray_defaults(          /* get default parameter values */
383          rp->specthresh = .15;
384          rp->specjitter = 1.;
385          rp->backvis = 1;
386 <        rp->maxdepth = 8;
386 >        rp->maxdepth = -10;
387          rp->minweight = 2e-3;
361        setcolor(rp->ambval, 0., 0., 0.);
388          memset(rp->ambfile, '\0', sizeof(rp->ambfile));
389 +        setcolor(rp->ambval, 0., 0., 0.);
390          rp->ambvwt = 0;
391          rp->ambres = 256;
392          rp->ambacc = 0.15;
# Line 370 | Line 397 | ray_defaults(          /* get default parameter values */
397          memset(rp->amblval, '\0', sizeof(rp->amblval));
398          for (i = AMBLLEN+1; i--; )
399                  rp->amblndx[i] = -1;
400 +        
401 +        /* PMAP: restore photon mapping defaults */
402 +        ray_defaults_pmap(rp);
403   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines