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.8 by greg, Wed Dec 21 09:07:19 1994 UTC vs.
Revision 2.9 by greg, Fri Aug 18 10:20:10 1995 UTC

# Line 63 | Line 63 | register VIEW  *v;
63                  v->hn2 = 2.0 * tan(v->horiz*(PI/180.0/2.0));
64                  v->vn2 = 2.0 * tan(v->vert*(PI/180.0/2.0));
65                  break;
66 +        case VT_CYL:                            /* cylindrical panorama */
67 +                if (v->horiz > 360.0+FTINY)
68 +                        return(ill_horiz);
69 +                if (v->vert >= 180.0-FTINY)
70 +                        return(ill_vert);
71 +                v->hn2 = v->horiz * (PI/180.0);
72 +                v->vn2 = 2.0 * tan(v->vert*(PI/180.0/2.0));
73 +                break;
74          case VT_ANG:                            /* angular fisheye */
75                  if (v->horiz > 360.0+FTINY)
76                          return(ill_horiz);
77                  if (v->vert > 360.0+FTINY)
78                          return(ill_vert);
79 <                v->hn2 = v->horiz / 90.0;
80 <                v->vn2 = v->vert / 90.0;
79 >                v->hn2 = v->horiz * (PI/180.0);
80 >                v->vn2 = v->vert * (PI/180.0);
81                  break;
82          case VT_HEM:                            /* hemispherical fisheye */
83                  if (v->horiz > 180.0+FTINY)
# Line 83 | Line 91 | register VIEW  *v;
91                  return("unknown view type");
92          }
93          if (v->type != VT_ANG) {
94 <                v->hvec[0] *= v->hn2;
95 <                v->hvec[1] *= v->hn2;
96 <                v->hvec[2] *= v->hn2;
94 >                if (v->type != VT_CYL) {
95 >                        v->hvec[0] *= v->hn2;
96 >                        v->hvec[1] *= v->hn2;
97 >                        v->hvec[2] *= v->hn2;
98 >                }
99                  v->vvec[0] *= v->vn2;
100                  v->vvec[1] *= v->vn2;
101                  v->vvec[2] *= v->vn2;
# Line 153 | Line 163 | double  x, y;
163                  orig[1] = v->vp[1] + v->vfore*direc[1];
164                  orig[2] = v->vp[2] + v->vfore*direc[2];
165                  return(v->vaft > FTINY ? v->vaft - v->vfore : 0.0);
166 +        case VT_CYL:                    /* cylindrical panorama */
167 +                d = x * v->horiz * (PI/180.0);
168 +                z = cos(d);
169 +                x = sin(d);
170 +                direc[0] = z*v->vdir[0] + x*v->hvec[0] + y*v->vvec[0];
171 +                direc[1] = z*v->vdir[1] + x*v->hvec[1] + y*v->vvec[1];
172 +                direc[2] = z*v->vdir[2] + x*v->hvec[2] + y*v->vvec[2];
173 +                orig[0] = v->vp[0] + v->vfore*direc[0];
174 +                orig[1] = v->vp[1] + v->vfore*direc[1];
175 +                orig[2] = v->vp[2] + v->vfore*direc[2];
176 +                d = normalize(direc);
177 +                return(v->vaft > FTINY ? (v->vaft - v->vfore)*d : 0.0);
178          case VT_ANG:                    /* angular fisheye */
179                  x *= v->horiz/180.0;
180                  y *= v->vert/180.0;
# Line 215 | Line 237 | FVECT  p;
237                          ip[2] = d;
238                  ip[2] -= v->vfore;
239                  break;
240 +        case VT_CYL:                    /* cylindrical panorama */
241 +                ip[2] = DOT(disp,v->vdir);
242 +                d = DOT(disp,v->hvec);
243 +                ip[0] = 180.0/PI * atan2(ip[2],d) / v->horiz + 0.5 - v->hoff;
244 +                ip[1] = DOT(disp,v->vvec)/v->vn2 + 0.5 - v->voff;
245 +                if (v->vfore > FTINY)
246 +                        ip[2] = sqrt(DOT(disp,disp)) *
247 +                                (1.0 - v->vfore/sqrt(d*d + ip[2]*ip[2]));
248 +                else
249 +                        ip[2] = sqrt(DOT(disp,disp));
250 +                return;
251          case VT_ANG:                    /* angular fisheye */
252                  ip[0] = 0.5 - v->hoff;
253                  ip[1] = 0.5 - v->voff;
# Line 224 | Line 257 | FVECT  p;
257                          return;
258                  if (d <= -(1.0-FTINY)) {
259                          ip[0] += 180.0/v->horiz;
227                        ip[1] += 180.0/v->vert;
260                          return;
261                  }
262                  d = acos(d)/PI / sqrt(1.0 - d*d);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines