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.6 by greg, Thu Nov 8 00:31:17 2012 UTC vs.
Revision 2.10 by greg, Sun Nov 18 03:56:39 2012 UTC

# Line 188 | Line 188 | rotate_rbf(RBFNODE *rbf, const FVECT invec)
188          FVECT                   outvec;
189          int                     pos[2];
190          int                     n;
191 < #ifdef DEBUG
192 <        {
193 <                double  tdiff = 180./M_PI*fabs(acos(invec[2])-acos(rbf->invec[2]));
194 <                if (tdiff >= 1.5)
195 <                        fprintf(stderr,
196 <                        "%s: Warning - rotated theta differs by %.1f degrees\n",
197 <                                        progname, tdiff);
198 <        }
199 < #endif
200 <        for (n = rbf->nrbf; n-- > 0; ) {
191 >
192 >        for (n = ((-.01 > phi) | (phi > .01))*rbf->nrbf; n-- > 0; ) {
193                  ovec_from_pos(outvec, rbf->rbfa[n].gx, rbf->rbfa[n].gy);
194                  spinvector(outvec, outvec, vnorm, phi);
195                  pos_from_vec(pos, outvec);
# Line 223 | Line 215 | ovec_from_pos(FVECT vec, int xpos, int ypos)
215          double  uv[2];
216          double  r2;
217          
218 <        SDsquare2disk(uv, (1./grid_res)*(xpos+.5), (1./grid_res)*(ypos+.5));
218 >        SDsquare2disk(uv, (xpos+.5)/grid_res, (ypos+.5)/grid_res);
219                                  /* uniform hemispherical projection */
220          r2 = uv[0]*uv[0] + uv[1]*uv[1];
221          vec[0] = vec[1] = sqrt(2. - r2);
# Line 249 | Line 241 | pos_from_vec(int pos[2], const FVECT vec)
241   double
242   eval_rbfrep(const RBFNODE *rp, const FVECT outvec)
243   {
244 <        double          res = .0;
244 >        double          res = 0;
245          const RBFVAL    *rbfp;
246          FVECT           odir;
247          double          sig2;
# Line 493 | Line 485 | load_bsdf_rep(FILE *ifp)
485                  rbfh.invec[0] = getflt(ifp);
486                  rbfh.invec[1] = getflt(ifp);
487                  rbfh.invec[2] = getflt(ifp);
488 +                if (normalize(rbfh.invec) == 0) {
489 +                        fprintf(stderr, "%s: zero incident vector\n", progname);
490 +                        return(0);
491 +                }
492                  rbfh.vtotal = getflt(ifp);
493                  rbfh.nrbf = getint(4, ifp);
494                  newrbf = (RBFNODE *)malloc(sizeof(RBFNODE) +
495                                          sizeof(RBFVAL)*(rbfh.nrbf-1));
496                  if (newrbf == NULL)
497                          goto memerr;
498 <                memcpy(newrbf, &rbfh, sizeof(RBFNODE));
498 >                memcpy(newrbf, &rbfh, sizeof(RBFNODE)-sizeof(RBFVAL));
499                  for (i = 0; i < rbfh.nrbf; i++) {
500                          newrbf->rbfa[i].peak = getflt(ifp);
501                          newrbf->rbfa[i].crad = getint(2, ifp) & 0xffff;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines