--- ray/src/util/findglare.c 1991/03/19 09:08:18 1.5 +++ ray/src/util/findglare.c 1991/03/20 12:20:38 1.9 @@ -19,7 +19,7 @@ static char SCCSid[] = "$SunId$ LBL"; char *rtargv[32] = {"rtrace", "-h", "-ov", "-fff"}; int rtargc = 4; -VIEW ourview; /* our view */ +VIEW ourview = STDVIEW; /* our view */ VIEW pictview = STDVIEW; /* picture view */ VIEW leftview, rightview; /* leftmost and rightmost views */ @@ -29,6 +29,8 @@ char *octree = NULL; /* octree file name */ int verbose = 0; /* verbose reporting */ char *progname; /* global argv[0] */ +double threshold = 0.; /* glare threshold */ + int sampdens = SAMPDENS; /* sample density */ ANGLE glarang[180] = {AEND}; /* glare calculation angles */ int nglarangs = 0; @@ -57,6 +59,9 @@ char *argv[]; continue; } switch (argv[i][1]) { + case 't': + threshold = atof(argv[++i]); + break; case 'r': sampdens = atoi(argv[++i])/2; break; @@ -168,7 +173,8 @@ char *argv[]; exit(1); } init(); /* initialize program */ - comp_thresh(); /* compute glare threshold */ + if (threshold <= FTINY) + comp_thresh(); /* compute glare threshold */ analyze(); /* analyze view */ cleanup(); /* tidy up */ /* print header */ @@ -225,22 +231,22 @@ init() /* initialize global variables */ setview(&rightview); indirect[nglarangs].lcos = indirect[nglarangs].rcos = cos(maxtheta); - indirect[nglarangs].lsin = - -(indirect[nglarangs].rsin = sin(maxtheta)); + indirect[nglarangs].rsin = + -(indirect[nglarangs].lsin = sin(maxtheta)); indirect[nglarangs].theta = 0.0; for (i = 0; i < nglarangs; i++) { d = (glarang[nglarangs-1] - glarang[i])*(PI/180.); indirect[nglarangs-i-1].lcos = indirect[nglarangs+i+1].rcos = cos(d); - indirect[nglarangs-i-1].lsin = - -(indirect[nglarangs+i+1].rsin = sin(d)); + indirect[nglarangs+i+1].rsin = + -(indirect[nglarangs-i-1].lsin = sin(d)); d = (glarang[nglarangs-1] + glarang[i])*(PI/180.); indirect[nglarangs-i-1].rcos = indirect[nglarangs+i+1].lcos = cos(d); - indirect[nglarangs+i+1].lsin = - -(indirect[nglarangs-i-1].rsin = sin(d)); - indirect[nglarangs-i-1].theta = -(PI/180.)*glarang[i]; - indirect[nglarangs+i+1].theta = (PI/180.)*glarang[i]; + indirect[nglarangs-i-1].rsin = + -(indirect[nglarangs+i+1].lsin = sin(d)); + indirect[nglarangs-i-1].theta = (PI/180.)*glarang[i]; + indirect[nglarangs+i+1].theta = -(PI/180.)*glarang[i]; } /* open picture */ if (picture != NULL) { @@ -292,25 +298,6 @@ int x, y; return(-1); spinvector(vd, vd, ourview.vup, h_theta(x)); return(0); -} - - -spinvector(vres, vorig, vnorm, theta) /* rotate vector around normal */ -FVECT vres, vorig, vnorm; -double theta; -{ - extern double sin(), cos(); - double sint, cost, dotp; - FVECT vperp; - register int i; - - sint = sin(theta); - cost = cos(theta); - dotp = DOT(vorig, vnorm); - fcross(vperp, vnorm, vorig); - for (i = 0; i < 3; i++) - vres[i] = vnorm[i]*dotp*(1.-cost) + - vorig[i]*cost + vperp[i]*sint; }