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

Comparing ray/src/common/image.c (file contents):
Revision 2.46 by greg, Fri Apr 27 05:00:29 2018 UTC vs.
Revision 2.51 by greg, Thu May 14 20:49:57 2020 UTC

# Line 245 | Line 245 | FVECT  p
245                  break;
246          case VT_PER:                    /* perspective view */
247                  d = DOT(disp,v->vdir);
248 <                if ((v->vaft > FTINY) & (d > v->vaft))
248 >                if ((v->vaft > FTINY) & (d >= v->vaft))
249                          rflags |= VL_BEYOND;
250                  ip[2] = VLEN(disp);
251                  if (d < -FTINY) {       /* fold pyramid */
# Line 272 | Line 272 | FVECT  p
272                  d = DOT(disp,v->hvec);
273                  d2 = DOT(disp,v->vdir);
274                  ip[0] = 180.0/PI * atan2(d,d2) / v->horiz + 0.5 - v->hoff;
275 <                d = d*d + d2*d2;
276 <                if (d <= FTINY*FTINY)
275 >                d2 = d*d + d2*d2;
276 >                if (d2 <= FTINY*FTINY)
277                          return(VL_BAD); /* at pole */
278 <                if ((v->vaft > FTINY) & (d > v->vaft*v->vaft))
278 >                if ((v->vaft > FTINY) & (d2 >= v->vaft*v->vaft))
279                          rflags |= VL_BEYOND;
280 <                d = 1.0/sqrt(d);
280 >                d = 1.0/sqrt(d2);
281                  ip[1] = DOT(disp,v->vvec)*d/v->vn2 + 0.5 - v->voff;
282                  ip[2] = VLEN(disp);
283                  ip[2] *= (1.0 - v->vfore*d);
# Line 315 | Line 315 | FVECT  p
315          ip[0] = DOT(disp,v->hvec)/v->hn2 + 0.5 - v->hoff;
316          ip[1] = DOT(disp,v->vvec)/v->vn2 + 0.5 - v->voff;
317   gotall:                                 /* add appropriate return flags */
318 <        rflags |= VL_BEHIND*(ip[2] <= 0.0);
318 >        if (ip[2] <= 0.0)
319 >                rflags |= VL_BEHIND;
320 >        else if ((v->type != VT_PER) & (v->type != VT_CYL))
321 >                rflags |= VL_BEYOND*((v->vaft > FTINY) &
322 >                                        (ip[2] >= v->vaft - v->vfore));
323          rflags |= VL_OUTSIDE*((0.0 >= ip[0]) | (ip[0] >= 1.0) |
324                                  (0.0 >= ip[1]) | (ip[1] >= 1.0));
321        if ((v->vaft > FTINY) & !(rflags & (VL_BEHIND|VL_BEYOND)))
322                rflags |= VL_BEYOND*(ip[2] > v->vaft - v->vfore);
325          return(rflags);
326   }
327  
# Line 384 | Line 386 | int  ac,
386   char  *av[]
387   )
388   {
389 < #define check(c,l)      if ((av[0][c]&&av[0][c]!=' ') || \
389 > #define check(c,l)      if ((av[0][c]&&!isspace(av[0][c])) || \
390                          badarg(ac-1,av+1,l)) return(-1)
391  
392          if (ac <= 0 || av[0][0] != '-' || av[0][1] != 'v')
393                  return(-1);
394          switch (av[0][2]) {
395          case 't':                       /* type */
396 <                if (!av[0][3] || av[0][3]==' ')
396 >                if (!av[0][3] || isspace(av[0][3]))
397                          return(-1);
398                  check(4,"");
399                  v->type = av[0][3];
# Line 576 | Line 578 | char  *s
578          }
579                                          /* skip leading path */
580          cp = s;
581 <        while (*cp && *cp != ' ')
581 >        while (*cp && !isspace(*cp))
582                  cp++;
583          while (cp > s && !ISDIRSEP(cp[-1]))
584                  cp--;
# Line 628 | Line 630 | RESOLU  *rp
630          if (rp != NULL && !fgetsresolu(rp, fp))
631                  mvs.ok = 0;
632  
633 <        fclose(fp);
633 >        if (fp != stdin)
634 >                fclose(fp);
635  
636          return(mvs.ok);
637   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines