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.41 by greg, Wed Jan 24 03:34:15 2018 UTC vs.
Revision 2.42 by greg, Wed Jan 24 04:23:06 2018 UTC

# Line 245 | Line 245 | FVECT  p
245          case VT_PER:                    /* perspective view */
246                  d = DOT(disp,v->vdir);
247                  ip[2] = VLEN(disp);
248 <                if (d < 0.0) {          /* fold pyramid */
248 >                if (d < -FTINY) {       /* fold pyramid */
249                          ip[2] = -ip[2];
250                          d = -d;
251 <                }
252 <                if (d <= FTINY)
251 >                } else if (d <= FTINY)
252                          return(0);      /* at infinite edge */
253                  d = 1.0/d;
254                  disp[0] *= d;
255                  disp[1] *= d;
256                  disp[2] *= d;
257 +                if (ip[2] < 0.0) d = -d;
258                  ip[2] *= (1.0 - v->vfore*d);
259                  break;
260          case VT_HEM:                    /* hemispherical fisheye */
# Line 276 | Line 276 | FVECT  p
276                  ip[1] = DOT(disp,v->vvec)*d/v->vn2 + 0.5 - v->voff;
277                  ip[2] = VLEN(disp);
278                  ip[2] *= (1.0 - v->vfore*d);
279 <                return(1);
279 >                goto gotall;
280          case VT_ANG:                    /* angular fisheye */
281                  ip[0] = 0.5 - v->hoff;
282                  ip[1] = 0.5 - v->voff;
283                  ip[2] = normalize(disp) - v->vfore;
284                  d = DOT(disp,v->vdir);
285                  if (d >= 1.0-FTINY)
286 <                        return(1);
286 >                        goto gotall;
287                  if (d <= -(1.0-FTINY)) {
288                          ip[0] += 180.0/v->horiz;
289 <                        return(1);
289 >                        goto gotall;
290                  }
291                  d = (180.0/PI)*acos(d) / sqrt(1.0 - d*d);
292                  ip[0] += DOT(disp,v->hvec)*d/v->horiz;
293                  ip[1] += DOT(disp,v->vvec)*d/v->vert;
294 <                return(1);
294 >                goto gotall;
295          case VT_PLS:                    /* planispheric fisheye */
296                  ip[0] = 0.5 - v->hoff;
297                  ip[1] = 0.5 - v->voff;
298                  ip[2] = normalize(disp) - v->vfore;
299                  d = DOT(disp,v->vdir);
300                  if (d >= 1.0-FTINY)
301 <                        return(1);
301 >                        goto gotall;
302                  if (d <= -(1.0-FTINY))
303                          return(0);
304                  ip[0] += DOT(disp,v->hvec)/((1. + d)*sqrt(v->hn2));
305                  ip[1] += DOT(disp,v->vvec)/((1. + d)*sqrt(v->vn2));
306 <                return(1);
306 >                goto gotall;
307          }
308          ip[0] = DOT(disp,v->hvec)/v->hn2 + 0.5 - v->hoff;
309          ip[1] = DOT(disp,v->vvec)/v->vn2 + 0.5 - v->voff;
310 <        return(1);
310 > gotall:                                 /* return -1 if behind */
311 >        return(1 - 2*(ip[2] <= 0.0));
312   }
313  
314  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines