64 |
|
FVECT uva[2]; /* tangent axes */ |
65 |
|
int ntris; /* number of triangles */ |
66 |
|
struct ptri { |
67 |
< |
float afrac; /* fraction of total area */ |
67 |
> |
double afrac; /* fraction of total area */ |
68 |
|
short vndx[3]; /* vertex indices */ |
69 |
|
} tri[1]; /* triangle array (extends struct) */ |
70 |
|
} POLYTRIS; /* triangulated polygon */ |
138 |
|
|
139 |
|
if (ac-- <= 0) |
140 |
|
return(NULL); |
141 |
+ |
if (verbose < 0) { /* turn off warnings */ |
142 |
+ |
strcpy(cp, "-w- "); |
143 |
+ |
cp += 4; |
144 |
+ |
} |
145 |
|
while (ac-- > 0) { |
146 |
|
strcpy(cp, *av++); |
147 |
|
while (*cp) cp++; |
606 |
|
sp->priv = (void *)ptp; |
607 |
|
} |
608 |
|
/* pick triangle by partial area */ |
609 |
< |
for (i = 0; i < ptp->ntris && x > ptp->tri[i].afrac; i++) |
609 |
> |
for (i = 0; i < ptp->ntris-1 && x > ptp->tri[i].afrac; i++) |
610 |
|
x -= ptp->tri[i].afrac; |
611 |
|
SDmultiSamp(samp2, 2, x/ptp->tri[i].afrac); |
612 |
|
samp2[0] *= samp2[1] = sqrt(samp2[1]); |
694 |
|
duvw[2]*p->nrm[i] ; |
695 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
696 |
|
return(0); |
697 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
697 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
698 |
|
return(0); |
699 |
|
} |
700 |
|
return(1); |
724 |
|
duvw[2]*p->nrm[i] ; |
725 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
726 |
|
return(0); |
727 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
727 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
728 |
|
return(0); |
729 |
|
} |
730 |
|
return(1); |
772 |
|
duvw[2]*p->nrm[i] ; |
773 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
774 |
|
return(0); |
775 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
775 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
776 |
|
return(0); |
777 |
|
} |
778 |
|
return(1); |
823 |
|
duvw[2]*p->nrm[i] ; |
824 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp2[0])) |
825 |
|
return(0); |
826 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
826 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
827 |
|
return(0); |
828 |
|
} |
829 |
|
return(1); |
1309 |
|
fputs(": -i, -I supported for pass-through only\n", stderr); |
1310 |
|
return(1); |
1311 |
|
} |
1312 |
< |
fmtopt[2] = (sizeof(RREAL)==sizeof(double)) ? 'd' : 'f'; |
1312 |
> |
#ifdef SMLFLT |
1313 |
> |
fmtopt[2] = 'f'; |
1314 |
> |
#else |
1315 |
> |
fmtopt[2] = 'd'; |
1316 |
> |
#endif |
1317 |
|
if (sampcnt <= 0) sampcnt = 10000; |
1318 |
|
} |
1319 |
|
sprintf(sampcntbuf, "%d", sampcnt); |