--- ray/src/util/rfluxmtx.c 2014/08/26 19:10:10 2.18 +++ ray/src/util/rfluxmtx.c 2015/02/02 16:04:11 2.20 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.18 2014/08/26 19:10:10 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.20 2015/02/02 16:04:11 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -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 */