468 |
|
/* convert vector coordinates */ |
469 |
|
if (sdt->st->ndim == 3) { |
470 |
|
spinvector(rOutVec, outVec, zvec, -atan2(-inVec[1],-inVec[0])); |
471 |
< |
gridPos[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]); |
471 |
> |
gridPos[0] = (.5-FTINY) - |
472 |
> |
.5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]); |
473 |
|
SDdisk2square(gridPos+1, rOutVec[0], rOutVec[1]); |
474 |
|
} else if (sdt->st->ndim == 4) { |
475 |
|
SDdisk2square(gridPos, -inVec[0], -inVec[1]); |
673 |
|
if (sdt->st->ndim == 3) { /* isotropic BSDF? */ |
674 |
|
if (mode != sdt->sidef) /* XXX unhandled reciprocity */ |
675 |
|
return &SDemptyCD; |
676 |
< |
inCoord[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]); |
676 |
> |
inCoord[0] = (.5-FTINY) - |
677 |
> |
.5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]); |
678 |
|
} else if (sdt->st->ndim == 4) { |
679 |
|
if (mode != sdt->sidef) /* use reciprocity? */ |
680 |
|
SDdisk2square(inCoord, inVec[0], inVec[1]); |
730 |
|
} else { |
731 |
|
const SDTreCDst *cd = (const SDTreCDst *)SDgetTreCDist(v1, sdc); |
732 |
|
if (cd == NULL) |
733 |
< |
return SDEmemory; |
734 |
< |
myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) * |
735 |
< |
(cd->clim[1][1] - cd->clim[1][0]); |
736 |
< |
myPSA[1] = cd->max_psa; |
733 |
> |
myPSA[0] = myPSA[1] = 0; |
734 |
> |
else { |
735 |
> |
myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) * |
736 |
> |
(cd->clim[1][1] - cd->clim[1][0]); |
737 |
> |
myPSA[1] = cd->max_psa; |
738 |
> |
} |
739 |
|
} |
740 |
|
switch (qflags) { /* record based on flag settings */ |
741 |
|
case SDqueryVal: |
750 |
|
psa[1] = myPSA[1]; |
751 |
|
/* fall through */ |
752 |
|
case SDqueryMin: |
753 |
< |
if (myPSA[0] < psa[0]) |
753 |
> |
if ((myPSA[0] > 0) & (myPSA[0] < psa[0])) |
754 |
|
psa[0] = myPSA[0]; |
755 |
|
break; |
756 |
|
} |