--- ray/src/util/rfluxmtx.c 2014/08/26 07:41:29 2.16 +++ ray/src/util/rfluxmtx.c 2015/02/18 06:16:02 2.22 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.16 2014/08/26 07:41:29 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.22 2015/02/18 06:16:02 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -362,8 +362,8 @@ parse_params(PARAMS *p, char *pargs) case ' ': case '\t': case '\r': - continue; case '\n': + continue; case '\0': return(nparams); default: @@ -417,7 +417,10 @@ finish_receiver(void) } /* determine sample type/bin */ if (tolower(curparams.hemis[0]) == 'u' | curparams.hemis[0] == '1') { - binv = "0"; /* uniform sampling -- one bin */ + sprintf(sbuf, "if(-Dx*%g-Dy*%g-Dz*%g,0,-1)", + curparams.nrm[0], curparams.nrm[1], curparams.nrm[2]); + binv = savqstr(sbuf); + nbins = "1"; /* uniform sampling -- one bin */ uniform = 1; } else if (tolower(curparams.hemis[0]) == 's' && tolower(curparams.hemis[1]) == 'c') { @@ -516,21 +519,12 @@ make_axes(FVECT uva[2], const FVECT nrm) { int i; - uva[1][0] = 0.5 - frandom(); - uva[1][1] = 0.5 - frandom(); - uva[1][2] = 0.5 - frandom(); - for (i = 3; i--; ) - if ((-0.6 < nrm[i]) & (nrm[i] < 0.6)) - break; - if (i < 0) { + if (!getperpendicular(uva[0], nrm)) { fputs(progname, stderr); fputs(": bad surface normal in make_axes!\n", stderr); exit(1); } - uva[1][i] = 1.0; - VCROSS(uva[0], uva[1], nrm); - normalize(uva[0]); - VCROSS(uva[1], nrm, uva[0]); + fcross(uva[1], nrm, uva[0]); } /* Illegal sender surfaces end up here */ @@ -792,8 +786,8 @@ sample_reinhart(PARAMS *p, int b, FILE *fp) alt = (row+samp3[1])*RAH; azi = (2.*PI)*(col+samp3[2]-.5)/rnaz(row); duvw[2] = cos(alt); /* measured from horizon */ - duvw[0] = tcos(azi)*duvw[2]; - duvw[1] = tsin(azi)*duvw[2]; + duvw[0] = tsin(azi)*duvw[2]; + duvw[1] = tcos(azi)*duvw[2]; duvw[2] = sqrt(1. - duvw[2]*duvw[2]); for (i = 3; i--; ) orig_dir[1][i] = -duvw[0]*p->udir[i] - @@ -844,7 +838,7 @@ sample_klems(PARAMS *p, int b, FILE *fp) while (n--) { /* stratified sampling */ SDmultiSamp(samp2, 2, (n+frandom())/sampcnt); - if (!bo_getvec(duvw, b+samp2[1], kbasis[bi])) + if (!bi_getvec(duvw, b+samp2[1], kbasis[bi])) return(0); for (i = 3; i--; ) orig_dir[1][i] = duvw[0]*p->udir[i] + @@ -1356,7 +1350,7 @@ main(int argc, char *argv[]) #ifdef getc_unlocked flockfile(rcfp); #endif - if (verbose) { + if (verbose > 0) { fprintf(stderr, "%s: sampling %d directions", progname, nsbins); if (curparams.nsurfs > 1) fprintf(stderr, " (%d elements)\n", curparams.nsurfs);