ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/bsdf_t.c
(Generate patch)

Comparing ray/src/common/bsdf_t.c (file contents):
Revision 3.25 by greg, Mon Sep 10 18:06:08 2012 UTC vs.
Revision 3.33 by greg, Fri Mar 21 17:49:53 2014 UTC

# Line 284 | Line 284 | SDdotravTre(const SDNode *st, const double *pos, int c
284                  unsigned        skipmask = 0;
285                  csiz *= .5;
286                  for (i = st->ndim; i--; )
287 <                        if (1<<i & cmask)
287 >                        if (1<<i & cmask) {
288                                  if (pos[i] < cmin[i] + csiz)
289                                          for (n = 1 << st->ndim; n--; ) {
290                                                  if (n & 1<<i)
# Line 295 | Line 295 | SDdotravTre(const SDNode *st, const double *pos, int c
295                                                  if (!(n & 1<<i))
296                                                          skipmask |= 1<<n;
297                                          }
298 +                        }
299                  for (n = 1 << st->ndim; n--; ) {
300                          if (1<<n & skipmask)
301                                  continue;
# Line 468 | Line 469 | SDqueryTre(const SDTre *sdt, const FVECT outVec, const
469                                          /* convert vector coordinates */
470          if (sdt->st->ndim == 3) {
471                  spinvector(rOutVec, outVec, zvec, -atan2(-inVec[1],-inVec[0]));
472 <                gridPos[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]);
472 >                gridPos[0] = (.5-FTINY) -
473 >                                .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]);
474                  SDdisk2square(gridPos+1, rOutVec[0], rOutVec[1]);
475          } else if (sdt->st->ndim == 4) {
476                  SDdisk2square(gridPos, -inVec[0], -inVec[1]);
# Line 603 | Line 605 | make_cdist(const SDTre *sdt, const double *invec, int
605                                          /* record input range */
606          scale = myScaffold.wmin / (double)iwmax;
607          for (i = myScaffold.nic; i--; ) {
608 <                cd->clim[i][0] = floor(pos[i]/scale) * scale;
608 >                cd->clim[i][0] = floor(pos[i+2*rev]/scale) * scale;
609                  cd->clim[i][1] = cd->clim[i][0] + scale;
610          }
611          if (cd->isodist) {              /* avoid issue in SDqueryTreProjSA() */
# Line 672 | Line 674 | SDgetTreCDist(const FVECT inVec, SDComponent *sdc)
674          if (sdt->st->ndim == 3) {       /* isotropic BSDF? */
675                  if (mode != sdt->sidef) /* XXX unhandled reciprocity */
676                          return &SDemptyCD;
677 <                inCoord[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]);
677 >                inCoord[0] = (.5-FTINY) -
678 >                                .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]);
679          } else if (sdt->st->ndim == 4) {
680                  if (mode != sdt->sidef) /* use reciprocity? */
681                          SDdisk2square(inCoord, inVec[0], inVec[1]);
# Line 728 | Line 731 | SDqueryTreProjSA(double *psa, const FVECT v1, const RR
731          } else {
732                  const SDTreCDst *cd = (const SDTreCDst *)SDgetTreCDist(v1, sdc);
733                  if (cd == NULL)
734 <                        return SDEmemory;
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;
734 >                        myPSA[0] = myPSA[1] = 0;
735 >                else {
736 >                        myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) *
737 >                                        (cd->clim[1][1] - cd->clim[1][0]);
738 >                        myPSA[1] = cd->max_psa;
739 >                }
740          }
741          switch (qflags) {               /* record based on flag settings */
742          case SDqueryVal:
# Line 746 | Line 751 | SDqueryTreProjSA(double *psa, const FVECT v1, const RR
751                          psa[1] = myPSA[1];
752                  /* fall through */
753          case SDqueryMin:
754 <                if (myPSA[0] < psa[0])
754 >                if ((myPSA[0] > 0) & (myPSA[0] < psa[0]))
755                          psa[0] = myPSA[0];
756                  break;
757          }
# Line 795 | Line 800 | SDsampTreCDist(FVECT ioVec, double randX, const SDCDst
800          SDsquare2disk(gpos, gpos[0], gpos[1]);
801                                          /* compute Z-coordinate */
802          gpos[2] = 1. - gpos[0]*gpos[0] - gpos[1]*gpos[1];
803 <        if (gpos[2] > 0)                /* paranoia, I hope */
799 <                gpos[2] = sqrt(gpos[2]);
803 >        gpos[2] = sqrt(gpos[2]*(gpos[2]>0));
804                                          /* emit from back? */
805          if ((cd->sidef == SD_BREFL) | (cd->sidef == SD_FXMIT))
806                  gpos[2] = -gpos[2];
# Line 845 | Line 849 | load_values(char **spp, float *va, int n)
849          char    *svnext;
850  
851          while (n-- > 0 && (svnext = fskip(*spp)) != NULL) {
852 <                *v++ = atof(*spp);
852 >                if ((*v++ = atof(*spp)) < 0)
853 >                        v[-1] = 0;
854                  *spp = svnext;
855                  eat_token(spp, ',');
856          }
# Line 1163 | Line 1168 | SDloadTre(SDData *sd, ezxml_t wtl)
1168                                          /* separate diffuse components */
1169          extract_diffuse(&sd->rLambFront, sd->rf);
1170          extract_diffuse(&sd->rLambBack, sd->rb);
1171 <        extract_diffuse(&sd->tLamb, (sd->tf != NULL) ? sd->tf : sd->tb);
1171 >        if (sd->tf != NULL)
1172 >                extract_diffuse(&sd->tLamb, sd->tf);
1173 >        if (sd->tb != NULL)
1174 >                extract_diffuse(&sd->tLamb, sd->tb);
1175                                          /* return success */
1176          return SDEnone;
1177   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines