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 */ |
602 |
|
sp->priv = (void *)ptp; |
603 |
|
} |
604 |
|
/* pick triangle by partial area */ |
605 |
< |
for (i = 0; i < ptp->ntris && x > ptp->tri[i].afrac; i++) |
605 |
> |
for (i = 0; i < ptp->ntris-1 && x > ptp->tri[i].afrac; i++) |
606 |
|
x -= ptp->tri[i].afrac; |
607 |
|
SDmultiSamp(samp2, 2, x/ptp->tri[i].afrac); |
608 |
|
samp2[0] *= samp2[1] = sqrt(samp2[1]); |
690 |
|
duvw[2]*p->nrm[i] ; |
691 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
692 |
|
return(0); |
693 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
693 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
694 |
|
return(0); |
695 |
|
} |
696 |
|
return(1); |
720 |
|
duvw[2]*p->nrm[i] ; |
721 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
722 |
|
return(0); |
723 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
723 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
724 |
|
return(0); |
725 |
|
} |
726 |
|
return(1); |
768 |
|
duvw[2]*p->nrm[i] ; |
769 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp3[0])) |
770 |
|
return(0); |
771 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
771 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
772 |
|
return(0); |
773 |
|
} |
774 |
|
return(1); |
819 |
|
duvw[2]*p->nrm[i] ; |
820 |
|
if (!sample_origin(p, orig_dir[0], orig_dir[1], samp2[0])) |
821 |
|
return(0); |
822 |
< |
if (fwrite(orig_dir, sizeof(FVECT), 2, fp) != 2) |
822 |
> |
if (putbinary(orig_dir, sizeof(FVECT), 2, fp) != 2) |
823 |
|
return(0); |
824 |
|
} |
825 |
|
return(1); |