--- ray/src/rt/rtrace.c 1989/02/02 10:41:37 1.1 +++ ray/src/rt/rtrace.c 1990/01/04 11:16:05 1.7 @@ -16,6 +16,7 @@ static char SCCSid[] = "$SunId$ LBL"; * xorg yorg zorg xdir ydir zdir * * The direction need not be normalized. Output is flexible. + * If the direction vector is (0,0,0), then the output is flushed. * All values default to ascii representation of real * numbers. Binary representations can be selected * with '-ff' for float or '-fd' for double. By default, @@ -35,13 +36,15 @@ int hresolu = 0; /* horizontal (scan) size */ int vresolu = 0; /* vertical resolution */ double dstrsrc = 0.0; /* square source distribution */ +double shadthresh = .05; /* shadow threshold */ +double shadcert = .5; /* shadow certainty */ int maxdepth = 6; /* maximum recursion depth */ double minweight = 4e-3; /* minimum ray weight */ COLOR ambval = BLKCOLOR; /* ambient value */ double ambacc = 0.2; /* ambient accuracy */ -int ambres = 128; /* ambient resolution */ +int ambres = 32; /* ambient resolution */ int ambdiv = 128; /* ambient divisions */ int ambssamp = 0; /* ambient super-samples */ int ambounce = 0; /* ambient bounces */ @@ -73,7 +76,7 @@ char *fname; long vcount = hresolu>1 ? hresolu*vresolu : vresolu; long nextflush = hresolu; FILE *fp; - FVECT orig, direc, vcol; + FVECT orig, direc; /* set up input */ if (fname == NULL) fp = stdin; @@ -92,14 +95,16 @@ char *fname; while (getvec(orig, inform, fp) == 0 && getvec(direc, inform, fp) == 0) { - if (normalize(direc) == 0.0) - error(USER, "zero direction vector"); + if (normalize(direc) == 0.0) { /* zero ==> flush */ + fflush(stdout); + continue; + } /* compute and print */ if (outvals[0] == 'i') irrad(orig, direc); else radiance(orig, direc); - /* flush if requested */ + /* flush if time */ if (--nextflush == 0) { fflush(stdout); nextflush = hresolu;