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.24 by greg, Sun Sep 2 15:33:15 2012 UTC vs.
Revision 3.30 by greg, Thu Jul 4 15:14:45 2013 UTC

# Line 499 | Line 499 | build_scaffold(float val, const double *cmin, double c
499   {
500          SDdistScaffold  *sp = (SDdistScaffold *)cptr;
501          int             wid = csiz*(double)iwmax + .5;
502 +        double          revcmin[2];
503          bitmask_t       bmin[2], bmax[2];
504  
505 <        cmin += sp->nic * !sp->rev;     /* skip to output coords */
505 >        if (sp->rev) {                  /* need to reverse sense? */
506 >                revcmin[0] = 1. - cmin[0] - csiz;
507 >                revcmin[1] = 1. - cmin[1] - csiz;
508 >                cmin = revcmin;
509 >        } else {
510 >                cmin += sp->nic;        /* else skip to output coords */
511 >        }
512          if (wid < sp->wmin)             /* new minimum width? */
513                  sp->wmin = wid;
514          if (wid > sp->wmax)             /* new maximum? */
# Line 596 | Line 603 | make_cdist(const SDTre *sdt, const double *invec, int
603                                          /* record input range */
604          scale = myScaffold.wmin / (double)iwmax;
605          for (i = myScaffold.nic; i--; ) {
606 <                cd->clim[i][0] = floor(pos[i]/scale) * scale;
606 >                cd->clim[i][0] = floor(pos[i+2*rev]/scale) * scale;
607                  cd->clim[i][1] = cd->clim[i][0] + scale;
608          }
609          if (cd->isodist) {              /* avoid issue in SDqueryTreProjSA() */
# Line 667 | Line 674 | SDgetTreCDist(const FVECT inVec, SDComponent *sdc)
674                          return &SDemptyCD;
675                  inCoord[0] = .5 - .5*sqrt(inVec[0]*inVec[0] + inVec[1]*inVec[1]);
676          } else if (sdt->st->ndim == 4) {
677 <                SDdisk2square(inCoord, -inVec[0], -inVec[1]);
677 >                if (mode != sdt->sidef) /* use reciprocity? */
678 >                        SDdisk2square(inCoord, inVec[0], inVec[1]);
679 >                else
680 >                        SDdisk2square(inCoord, -inVec[0], -inVec[1]);
681          } else
682                  return NULL;            /* should be internal error */
683                                          /* quantize to avoid f.p. errors */
# Line 718 | Line 728 | SDqueryTreProjSA(double *psa, const FVECT v1, const RR
728          } else {
729                  const SDTreCDst *cd = (const SDTreCDst *)SDgetTreCDist(v1, sdc);
730                  if (cd == NULL)
731 <                        return SDEmemory;
732 <                myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) *
733 <                                (cd->clim[1][1] - cd->clim[1][0]);
734 <                myPSA[1] = cd->max_psa;
731 >                        myPSA[0] = myPSA[1] = 0;
732 >                else {
733 >                        myPSA[0] = M_PI * (cd->clim[0][1] - cd->clim[0][0]) *
734 >                                        (cd->clim[1][1] - cd->clim[1][0]);
735 >                        myPSA[1] = cd->max_psa;
736 >                }
737          }
738          switch (qflags) {               /* record based on flag settings */
739          case SDqueryVal:
# Line 736 | Line 748 | SDqueryTreProjSA(double *psa, const FVECT v1, const RR
748                          psa[1] = myPSA[1];
749                  /* fall through */
750          case SDqueryMin:
751 <                if (myPSA[0] < psa[0])
751 >                if ((myPSA[0] > 0) & (myPSA[0] < psa[0]))
752                          psa[0] = myPSA[0];
753                  break;
754          }
# Line 947 | Line 959 | load_bsdf_data(SDData *sd, ezxml_t wdb, int ndim)
959           * Remember that front and back are reversed from WINDOW 6 orientations
960           */
961          if (!strcasecmp(sdata, "Transmission Front")) {
950                if (sd->tf != NULL)
951                        SDfreeSpectralDF(sd->tf);
952                if ((sd->tf = SDnewSpectralDF(1)) == NULL)
953                        return SDEmemory;
954                df = sd->tf;
955        } else if (!strcasecmp(sdata, "Transmission Back")) {
962                  if (sd->tb != NULL)
963                          SDfreeSpectralDF(sd->tb);
964                  if ((sd->tb = SDnewSpectralDF(1)) == NULL)
965                          return SDEmemory;
966                  df = sd->tb;
967 +        } else if (!strcasecmp(sdata, "Transmission Back")) {
968 +                if (sd->tf != NULL)
969 +                        SDfreeSpectralDF(sd->tf);
970 +                if ((sd->tf = SDnewSpectralDF(1)) == NULL)
971 +                        return SDEmemory;
972 +                df = sd->tf;
973          } else if (!strcasecmp(sdata, "Reflection Front")) {
974 <                if (sd->rb != NULL)     /* note back-front reversal */
974 >                if (sd->rb != NULL)
975                          SDfreeSpectralDF(sd->rb);
976                  if ((sd->rb = SDnewSpectralDF(1)) == NULL)
977                          return SDEmemory;
978                  df = sd->rb;
979          } else if (!strcasecmp(sdata, "Reflection Back")) {
980 <                if (sd->rf != NULL)     /* note front-back reversal */
980 >                if (sd->rf != NULL)
981                          SDfreeSpectralDF(sd->rf);
982                  if ((sd->rf = SDnewSpectralDF(1)) == NULL)
983                          return SDEmemory;
# Line 1153 | Line 1165 | SDloadTre(SDData *sd, ezxml_t wtl)
1165                                          /* separate diffuse components */
1166          extract_diffuse(&sd->rLambFront, sd->rf);
1167          extract_diffuse(&sd->rLambBack, sd->rb);
1168 <        extract_diffuse(&sd->tLamb, (sd->tf != NULL) ? sd->tf : sd->tb);
1168 >        if (sd->tf != NULL)
1169 >                extract_diffuse(&sd->tLamb, sd->tf);
1170 >        if (sd->tb != NULL)
1171 >                extract_diffuse(&sd->tLamb, sd->tb);
1172                                          /* return success */
1173          return SDEnone;
1174   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines