--- ray/src/util/rfluxmtx.c 2014/07/23 22:39:40 2.7 +++ ray/src/util/rfluxmtx.c 2014/07/28 16:30:18 2.12 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: rfluxmtx.c,v 2.7 2014/07/23 22:39:40 greg Exp $"; +static const char RCSid[] = "$Id: rfluxmtx.c,v 2.12 2014/07/28 16:30:18 greg Exp $"; #endif /* * Calculate flux transfer matrix or matrices using rcontrib @@ -11,6 +11,7 @@ static const char RCSid[] = "$Id: rfluxmtx.c,v 2.7 201 #include #include "rtio.h" #include "rtmath.h" +#include "rtprocess.h" #include "bsdf.h" #include "bsdf_m.h" #include "random.h" @@ -401,11 +402,12 @@ finish_receiver(void) fputs(": undefined normal for hemisphere sampling\n", stderr); exit(1); } - if (normalize(curparams.vup) == 0) + if (normalize(curparams.vup) == 0) { if (fabs(curparams.nrm[2]) < .7) curparams.vup[2] = 1; else curparams.vup[1] = 1; + } /* determine sample type/bin */ if (tolower(curparams.hemis[0]) == 'u' | curparams.hemis[0] == '1') { binv = "0"; /* uniform sampling -- one bin */ @@ -419,7 +421,7 @@ finish_receiver(void) exit(1); } calfn = shirchiufn; shirchiufn = NULL; - sprintf(sbuf, "SCdim=%d,Nx=%g,Ny=%g,Nz=%g,Ux=%g,Uy=%g,Uz=%g", + sprintf(sbuf, "SCdim=%d,rNx=%g,rNy=%g,rNz=%g,Ux=%g,Uy=%g,Uz=%g", curparams.hsiz, curparams.nrm[0], curparams.nrm[1], curparams.nrm[2], curparams.vup[0], curparams.vup[1], curparams.vup[2]); @@ -429,7 +431,7 @@ finish_receiver(void) } else if ((tolower(curparams.hemis[0]) == 'r') | (tolower(curparams.hemis[0]) == 't')) { calfn = reinhfn; reinhfn = NULL; - sprintf(sbuf, "MF=%d,Nx=%g,Ny=%g,Nz=%g,Ux=%g,Uy=%g,Uz=%g", + sprintf(sbuf, "MF=%d,rNx=%g,rNy=%g,rNz=%g,Ux=%g,Uy=%g,Uz=%g", curparams.hsiz, curparams.nrm[0], curparams.nrm[1], curparams.nrm[2], curparams.vup[0], curparams.vup[1], curparams.vup[2]); @@ -872,11 +874,12 @@ prepare_sampler(void) fputs(": undefined normal for sender sampling\n", stderr); return(-1); } - if (normalize(curparams.vup) == 0) + if (normalize(curparams.vup) == 0) { if (fabs(curparams.nrm[2]) < .7) curparams.vup[2] = 1; else curparams.vup[1] = 1; + } VCROSS(curparams.udir, curparams.vup, curparams.nrm); if (normalize(curparams.udir) == 0) { fputs(progname, stderr); @@ -1000,7 +1003,8 @@ add_surface(int st, const char *oname, FILE *fp) case ST_SOURCE: if (snew->nfargs != 4) goto badcount; - VCOPY(snew->snrm, snew->farg); + for (n = 3; n--; ) /* need to reverse "normal" */ + snew->snrm[n] = -snew->farg[n]; if (normalize(snew->snrm) == 0) goto badnorm; snew->area = sin((PI/180./2.)*snew->farg[3]); @@ -1063,11 +1067,11 @@ add_recv_object(FILE *fp) return(1); } /* else skip arguments */ - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*s"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*d"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*f"); return(0); } @@ -1099,11 +1103,11 @@ add_send_object(FILE *fp) return(0); } /* else skip arguments */ - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*s"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*d"); - if (!fscanf(fp, "%d", &n)) return; + if (!fscanf(fp, "%d", &n)) return(0); while (n-- > 0) fscanf(fp, "%*f"); return(0); } @@ -1146,7 +1150,7 @@ load_scene(const char *inspec, int (*ocb)(FILE *)) strcat(newparams, inpbuf); continue; } - while ((c = getc(fp)) != EOF && c != '\n'); + while ((c = getc(fp)) != EOF && c != '\n') ; /* else skipping comment */ continue; } @@ -1171,6 +1175,7 @@ main(int argc, char *argv[]) { char fmtopt[6] = "-faa"; /* default output is ASCII */ char *xrs=NULL, *yrs=NULL, *ldopt=NULL; + char *iropt = NULL; char *sendfn; char sampcntbuf[32], nsbinbuf[32]; FILE *rcfp; @@ -1218,10 +1223,14 @@ main(int argc, char *argv[]) goto userr; na = 0; /* we re-add this later */ continue; + case 'I': /* only for pass-through mode */ + case 'i': + iropt = argv[a]; + na = 0; + continue; case 'V': /* options without arguments */ case 'w': case 'u': - case 'i': case 'h': case 'r': break; @@ -1269,6 +1278,10 @@ done_opts: if (sendfn[0] == '-') { /* user wants pass-through mode? */ if (sendfn[1]) goto userr; sendfn = NULL; + if (iropt) { + CHECKARGC(1); + rcarg[nrcargs++] = iropt; + } if (xrs) { CHECKARGC(2); rcarg[nrcargs++] = "-x"; @@ -1284,7 +1297,12 @@ done_opts: rcarg[nrcargs++] = ldopt; } if (sampcnt <= 0) sampcnt = 1; - } else { /* else FVECT determines input format */ + } else { /* else in sampling mode */ + if (iropt) { + fputs(progname, stderr); + fputs(": -i, -I supported for pass-through only\n", stderr); + return(1); + } fmtopt[2] = (sizeof(RREAL)==sizeof(double)) ? 'd' : 'f'; if (sampcnt <= 0) sampcnt = 10000; }