496 |
|
sv->cieY = cd->cTotal; |
497 |
|
if (sv->cieY <= 1e-6) { /* nothing to sample? */ |
498 |
|
sv->spec = c_dfcolor; |
499 |
< |
memset(ioVec, 0, 3*sizeof(double)); |
499 |
> |
memset(ioVec, 0, sizeof(FVECT)); |
500 |
|
return SDEnone; |
501 |
|
} |
502 |
|
/* compute sample direction */ |
515 |
|
c_cmix(&sv->spec, d, &sv->spec, coef[n], &sdc->cspec[n]); |
516 |
|
d += coef[n]; |
517 |
|
} |
518 |
< |
/* make sure everything is set */ |
519 |
< |
c_ccvt(&sv->spec, C_CSXY+C_CSSPEC); |
518 |
> |
c_ccvt(&sv->spec, C_CSXY); /* make sure (x,y) is set */ |
519 |
|
return SDEnone; |
520 |
|
} |
521 |
|
|
645 |
|
} else if (!(inFront | outFront)) { |
646 |
|
*sv = sd->rLambBack; |
647 |
|
sdf = sd->rb; |
648 |
< |
} else if (inFront) { |
648 |
> |
} else if (outFront) { |
649 |
|
*sv = sd->tLamb; |
650 |
|
sdf = (sd->tf != NULL) ? sd->tf : sd->tb; |
651 |
< |
} else /* inBack */ { |
651 |
> |
} else /* inFront & !outFront */ { |
652 |
|
*sv = sd->tLamb; |
653 |
|
sdf = (sd->tb != NULL) ? sd->tb : sd->tf; |
654 |
|
} |
664 |
|
sv->cieY += coef[nch]; |
665 |
|
} |
666 |
|
} |
667 |
< |
/* make sure everything is set */ |
669 |
< |
c_ccvt(&sv->spec, C_CSXY+C_CSSPEC); |
667 |
> |
c_ccvt(&sv->spec, C_CSXY); /* make sure (x,y) is set */ |
668 |
|
return SDEnone; |
669 |
|
} |
670 |
|
|
768 |
|
} |
769 |
|
if (sv->cieY <= 1e-6) { /* anything to sample? */ |
770 |
|
sv->cieY = .0; |
771 |
< |
memset(ioVec, 0, 3*sizeof(double)); |
771 |
> |
memset(ioVec, 0, sizeof(FVECT)); |
772 |
|
return SDEnone; |
773 |
|
} |
774 |
|
/* scale random variable */ |
789 |
|
randX -= sd->tLamb.cieY; |
790 |
|
} |
791 |
|
/* else one of cumulative dist. */ |
792 |
< |
for (i = 0; i < n && randX > cdarr[i]->cTotal; i++) |
792 |
> |
for (i = 0; i < n && randX >= cdarr[i]->cTotal; i++) |
793 |
|
randX -= cdarr[i]->cTotal; |
794 |
|
if (i >= n) |
795 |
|
return SDEinternal; |
814 |
|
done: |
815 |
|
if (cdarr != NULL) |
816 |
|
free(cdarr); |
817 |
< |
/* make sure everything is set */ |
820 |
< |
c_ccvt(&sv->spec, C_CSXY+C_CSSPEC); |
817 |
> |
c_ccvt(&sv->spec, C_CSXY); /* make sure (x,y) is set */ |
818 |
|
return SDEnone; |
819 |
|
} |
820 |
|
|