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

Comparing ray/src/cv/bsdfrep.c (file contents):
Revision 2.33 by greg, Sat Dec 28 18:05:14 2019 UTC vs.
Revision 2.37 by greg, Wed Dec 15 01:38:50 2021 UTC

# Line 53 | Line 53 | MIGRATION              *mig_list = NULL;
53                                  /* current input direction */
54   double                  theta_in_deg, phi_in_deg;
55  
56 +                                /* header line sharing callback */
57 + int                     (*sir_headshare)(char *s) = NULL;
58 +
59   /* Register new input direction */
60   int
61   new_input_direction(double new_theta, double new_phi)
# Line 101 | Line 104 | new_input_direction(double new_theta, double new_phi)
104   int
105   use_symmetry(FVECT vec)
106   {
107 <        const double    phi = get_phi360(vec);
107 >        double  phi = get_phi360(vec);
108 >                                /* because of -0. issue */
109 >        while (phi >= 360.) phi -= 360.;
110 >        while (phi < 0.) phi += 360.;
111  
112          switch (inp_coverage) {
113          case INP_QUAD1|INP_QUAD2|INP_QUAD3|INP_QUAD4:
# Line 222 | Line 228 | rotate_rbf(RBFNODE *rbf, const FVECT invec)
228   void
229   ovec_from_pos(FVECT vec, int xpos, int ypos)
230   {
231 <        double  uv[2];
231 >        RREAL   uv[2];
232          double  r2;
233          
234 <        SDsquare2disk(uv, (xpos+.5)/grid_res, (ypos+.5)/grid_res);
234 >        square2disk(uv, (xpos+.5)/grid_res, (ypos+.5)/grid_res);
235                                  /* uniform hemispherical projection */
236          r2 = uv[0]*uv[0] + uv[1]*uv[1];
237          vec[0] = vec[1] = sqrt(2. - r2);
# Line 238 | Line 244 | ovec_from_pos(FVECT vec, int xpos, int ypos)
244   void
245   pos_from_vec(int pos[2], const FVECT vec)
246   {
247 <        double  sq[2];          /* uniform hemispherical projection */
247 >        RREAL   sq[2];          /* uniform hemispherical projection */
248          double  norm = 1./sqrt(1. + fabs(vec[2]));
249  
250 <        SDdisk2square(sq, vec[0]*norm, vec[1]*norm);
250 >        disk2square(sq, vec[0]*norm, vec[1]*norm);
251  
252          pos[0] = (int)(sq[0]*grid_res);
253          pos[1] = (int)(sq[1]*grid_res);
# Line 475 | Line 481 | e_advect_rbf(const MIGRATION *mig, const FVECT invec,
481          double          t, full_dist;
482                                                  /* get relative position */
483          t = Acos(DOT(invec, mig->rbfv[0]->invec));
484 <        if (t < M_PI/grid_res) {                /* near first DSF */
484 >        if (t <= .001) {                        /* near first DSF */
485                  n = sizeof(RBFNODE) + sizeof(RBFVAL)*(mig->rbfv[0]->nrbf-1);
486                  rbf = (RBFNODE *)malloc(n);
487                  if (rbf == NULL)
# Line 485 | Line 491 | e_advect_rbf(const MIGRATION *mig, const FVECT invec,
491                  return(rbf);
492          }
493          full_dist = acos(DOT(mig->rbfv[0]->invec, mig->rbfv[1]->invec));
494 <        if (t > full_dist-M_PI/grid_res) {      /* near second DSF */
494 >        if (t >= full_dist-.001) {              /* near second DSF */
495                  n = sizeof(RBFNODE) + sizeof(RBFVAL)*(mig->rbfv[1]->nrbf-1);
496                  rbf = (RBFNODE *)malloc(n);
497                  if (rbf == NULL)
# Line 661 | Line 667 | headline(char *s, void *p)
667          char    fmt[MAXFMTLEN];
668          int     i;
669  
670 +        if (isheadid(s))
671 +                return(0);
672          if (!strncmp(s, "NAME=", 5)) {
673                  strcpy(bsdf_name, s+5);
674                  bsdf_name[strlen(bsdf_name)-1] = '\0';
675 +                return(1);
676          }
677          if (!strncmp(s, "MANUFACT=", 9)) {
678                  strcpy(bsdf_manuf, s+9);
679                  bsdf_manuf[strlen(bsdf_manuf)-1] = '\0';
680 +                return(1);
681          }
682          if (!strncmp(s, "SYMMETRY=", 9)) {
683                  inp_coverage = atoi(s+9);
684                  single_plane_incident = !inp_coverage;
685 <                return(0);
685 >                return(1);
686          }
687          if (!strncmp(s, "IO_SIDES=", 9)) {
688                  sscanf(s+9, "%d %d", &input_orient, &output_orient);
689 <                return(0);
689 >                return(1);
690          }
691          if (!strncmp(s, "COLORIMETRY=", 12)) {
692                  fmt[0] = '\0';
# Line 687 | Line 697 | headline(char *s, void *p)
697                  if (i < 0)
698                          return(-1);
699                  rbf_colorimetry = i;
700 <                return(0);
700 >                return(1);
701          }
702          if (!strncmp(s, "GRIDRES=", 8)) {
703                  sscanf(s+8, "%d", &grid_res);
704 <                return(0);
704 >                return(1);
705          }
706          if (!strncmp(s, "BSDFMIN=", 8)) {
707                  sscanf(s+8, "%lf", &bsdf_min);
708 <                return(0);
708 >                return(1);
709          }
710          if (!strncmp(s, "BSDFSPEC=", 9)) {
711                  sscanf(s+9, "%lf %lf", &bsdf_spec_val, &bsdf_spec_rad);
712 <                return(0);
712 >                return(1);
713          }
714 <        if (formatval(fmt, s) && strcmp(fmt, BSDFREP_FMT))
715 <                return(-1);
714 >        if (formatval(fmt, s))
715 >                return (strcmp(fmt, BSDFREP_FMT) ? -1 : 0);
716 >        if (sir_headshare != NULL)
717 >                return ((*sir_headshare)(s));
718          return(0);
719   }
720  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines