--- ray/src/util/rsensor.c 2008/04/11 22:06:04 2.5 +++ ray/src/util/rsensor.c 2010/09/26 15:41:46 2.8 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rsensor.c,v 2.5 2008/04/11 22:06:04 greg Exp $"; +static const char RCSid[] = "$Id: rsensor.c,v 2.8 2010/09/26 15:41:46 greg Exp $"; #endif /* @@ -71,6 +71,17 @@ print_defaults() /* print out default parameters */ print_rdefaults(); } + +void +quit(ec) /* make sure exit is called */ +int ec; +{ + if (ray_pnprocs > 0) /* close children if any */ + ray_pclose(0); + exit(ec); +} + + int main( int argc, @@ -84,7 +95,7 @@ main( progname = argv[0]; /* set up rendering defaults */ rand_samp = 1; - dstrsrc = 0.5; + dstrsrc = 0.65; srcsizerat = 0.1; directrelay = 3; ambounce = 1; @@ -103,12 +114,14 @@ main( if (!ray_pnprocs) { over_options(); if (doheader) { /* print header */ + newheader("RADIANCE", stdout); printargs(argc, argv, stdout); fputformat("ascii", stdout); putchar('\n'); } /* start process(es) */ - ray_pinit(argv[argc-1], nprocs); + if (strcmp(argv[argc-1], ".")) + ray_pinit(argv[argc-1], nprocs); } comp_sensor(argv[i]); /* process a sensor file */ continue; @@ -182,7 +195,7 @@ main( } i += rval; } - if (!ray_pnprocs) + if (sensor == NULL) error(USER, i FTINY) VSUM(rr.rorg, rr.rorg, rr.rdir, ourview.vfore); + if (!ray_pnprocs) { + print_ray(rr.rorg, rr.rdir); + continue; + } rr.rmax = .0; rayorigin(&rr, PRIMARY, NULL, NULL); + scalecolor(rr.rcoef, sf); if (ray_pqueue(&rr) == 1) addcolor(vsum, rr.rcol); } - /* finish MC calculation */ - while (ray_presult(&rr, 0) > 0) - addcolor(vsum, rr.rcol); - scalecolor(vsum, gscale/(nt*np)); - /* compute direct component */ + /* remaining rays pure MC */ + for (i = nsamps - nt*np; i-- > 0; ) { + VCOPY(rr.rorg, ourview.vp); + get_direc(rr.rdir, frandom(), frandom()); + if (ourview.vfore > FTINY) + VSUM(rr.rorg, rr.rorg, rr.rdir, ourview.vfore); + if (!ray_pnprocs) { + print_ray(rr.rorg, rr.rdir); + continue; + } + rr.rmax = .0; + rayorigin(&rr, PRIMARY, NULL, NULL); + scalecolor(rr.rcoef, sf); + if (ray_pqueue(&rr) == 1) + addcolor(vsum, rr.rcol); + } + if (!ray_pnprocs) /* just printing rays */ + return; + /* scale partial result */ + scalecolor(vsum, sf); + /* add direct component */ for (i = ndirs; i-- > 0; ) { SRCINDEX si; initsrcindex(&si); while (srcray(&rr, NULL, &si)) { - double d = sens_val(rr.rdir); - if (d <= FTINY) + sf = sens_val(rr.rdir); + if (sf <= FTINY) continue; - d *= si.dom/ndirs; - scalecolor(rr.rcoef, d); + sf *= si.dom/ndirs; + scalecolor(rr.rcoef, sf); if (ray_pqueue(&rr) == 1) { multcolor(rr.rcol, rr.rcoef); addcolor(vsum, rr.rcol); } } } - /* finish direct calculation */ + /* finish our calculation */ while (ray_presult(&rr, 0) > 0) { multcolor(rr.rcol, rr.rcoef); addcolor(vsum, rr.rcol);