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.36 by greg, Wed Mar 2 17:24:55 2011 UTC vs.
Revision 2.40 by greg, Wed Apr 3 00:35:09 2013 UTC

# Line 33 | Line 33 | VIEW  *v
33          static char  ill_horiz[] = "illegal horizontal view size";
34          static char  ill_vert[] = "illegal vertical view size";
35          
36 <        if (v->vaft < -FTINY || (v->vaft > FTINY && v->vaft <= v->vfore))
36 >        if ((v->vfore < -FTINY) | (v->vaft < -FTINY) ||
37 >                        (v->vaft > FTINY) & (v->vaft <= v->vfore))
38                  return("illegal fore/aft clipping plane");
39  
40          if (v->vdist <= FTINY)
# Line 169 | Line 170 | double  y
170                  direc[0] = v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
171                  direc[1] = v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
172                  direc[2] = v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
173 <                orig[0] = v->vp[0] + v->vfore*direc[0];
173 <                orig[1] = v->vp[1] + v->vfore*direc[1];
174 <                orig[2] = v->vp[2] + v->vfore*direc[2];
173 >                VSUM(orig, v->vp, direc, v->vfore);
174                  d = normalize(direc);
175                  return(v->vaft > FTINY ? (v->vaft - v->vfore)*d : 0.0);
176          case VT_HEM:                    /* hemispherical fisheye */
# Line 182 | Line 181 | double  y
181                  direc[0] = z*v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
182                  direc[1] = z*v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
183                  direc[2] = z*v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
184 <                orig[0] = v->vp[0] + v->vfore*direc[0];
186 <                orig[1] = v->vp[1] + v->vfore*direc[1];
187 <                orig[2] = v->vp[2] + v->vfore*direc[2];
184 >                VSUM(orig, v->vp, direc, v->vfore);
185                  return(v->vaft > FTINY ? v->vaft - v->vfore : 0.0);
186          case VT_CYL:                    /* cylindrical panorama */
187                  d = x * v->horiz * (PI/180.0);
# Line 193 | Line 190 | double  y
190                  direc[0] = z*v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
191                  direc[1] = z*v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
192                  direc[2] = z*v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
193 <                orig[0] = v->vp[0] + v->vfore*direc[0];
197 <                orig[1] = v->vp[1] + v->vfore*direc[1];
198 <                orig[2] = v->vp[2] + v->vfore*direc[2];
193 >                VSUM(orig, v->vp, direc, v->vfore);
194                  d = normalize(direc);
195                  return(v->vaft > FTINY ? (v->vaft - v->vfore)*d : 0.0);
196          case VT_ANG:                    /* angular fisheye */
# Line 212 | Line 207 | double  y
207                  direc[0] = z*v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
208                  direc[1] = z*v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
209                  direc[2] = z*v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
210 <                orig[0] = v->vp[0] + v->vfore*direc[0];
216 <                orig[1] = v->vp[1] + v->vfore*direc[1];
217 <                orig[2] = v->vp[2] + v->vfore*direc[2];
210 >                VSUM(orig, v->vp, direc, v->vfore);
211                  return(v->vaft > FTINY ? v->vaft - v->vfore : 0.0);
212          case VT_PLS:                    /* planispheric fisheye */
213                  x *= sqrt(v->hn2);
214                  y *= sqrt(v->vn2);
215                  d = x*x + y*y;
216                  z = (1. - d)/(1. + d);
217 <                d = d <= FTINY*FTINY ? PI : sqrt((1.0 - z*z)/d);
218 <                x *= d;
226 <                y *= d;
217 >                x *= (1. + z);
218 >                y *= (1. + z);
219                  direc[0] = z*v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
220                  direc[1] = z*v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
221                  direc[2] = z*v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
222 <                orig[0] = v->vp[0] + v->vfore*direc[0];
231 <                orig[1] = v->vp[1] + v->vfore*direc[1];
232 <                orig[2] = v->vp[2] + v->vfore*direc[2];
222 >                VSUM(orig, v->vp, direc, v->vfore);
223                  return(v->vaft > FTINY ? v->vaft - v->vfore : 0.0);
224          }
225          return(-1.0);
# Line 308 | Line 298 | FVECT  p
298                          return;
299                  if (d <= -(1.0-FTINY))
300                          return;         /* really an error */
301 <                d = sqrt(1.0 - d*d) / (1.0 + d);
302 <                ip[0] += DOT(disp,v->hvec)*d/sqrt(v->hn2);
313 <                ip[1] += DOT(disp,v->vvec)*d/sqrt(v->vn2);
301 >                ip[0] += DOT(disp,v->hvec)/((1. + d)*sqrt(v->hn2));
302 >                ip[1] += DOT(disp,v->vvec)/((1. + d)*sqrt(v->vn2));
303                  return;
304          }
305          ip[0] = DOT(disp,v->hvec)/v->hn2 + 0.5 - v->hoff;
# Line 354 | Line 343 | double  ly
343   {
344          int  x, y;
345  
346 <        x = (lx >= 0.0) ? (int)(lx * rp->xr) : -(int)(-lx * rp->xr);
347 <        y = (ly >= 0.0) ? (int)(ly * rp->yr) : -(int)(-ly * rp->yr);
346 >        x = (int)(lx*rp->xr + .5 - (lx < 0.0));
347 >        y = (int)(ly*rp->yr + .5 - (ly < 0.0));
348 >
349          if (rp->rt & XDECR)
350                  x = rp->xr-1 - x;
351          if (rp->rt & YDECR)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines