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

Comparing ray/src/px/pinterp.c (file contents):
Revision 1.29 by greg, Tue Sep 4 21:16:25 1990 UTC vs.
Revision 1.30 by greg, Mon Oct 15 11:01:48 1990 UTC

# Line 60 | Line 60 | int    gotview;                        /* got input view? */
60   int     thresolu, tvresolu;             /* input resolution */
61   double  theirexp;                       /* input picture exposure */
62   double  theirs2ours[4][4];              /* transformation matrix */
63 + int     hasmatrix = 0;                  /* has transformation matrix */
64  
65   int     childpid = -1;                  /* id of fill process */
66   FILE    *psend, *precv;                 /* pipes to/from fill calculation */
# Line 284 | Line 285 | char   *pfile, *zspec;
285                  exit(1);
286          }
287                                          /* compute transformation */
288 <        pixform(theirs2ours, &theirview, &ourview);
288 >        hasmatrix = pixform(theirs2ours, &theirview, &ourview);
289                                          /* allocate scanlines */
290          scanin = (COLR *)malloc(thresolu*sizeof(COLR));
291          zin = (float *)malloc(thresolu*sizeof(float));
# Line 331 | Line 332 | register VIEW  *vw1, *vw2;
332   {
333          double  m4t[4][4];
334  
335 +        if (vw1->type != VT_PER && vw1->type != VT_PAR)
336 +                return(0);
337 +        if (vw2->type != VT_PER && vw2->type != VT_PAR)
338 +                return(0);
339          setident4(xfmat);
340          xfmat[0][0] = vw1->hvec[0];
341          xfmat[0][1] = vw1->hvec[1];
# Line 358 | Line 363 | register VIEW  *vw1, *vw2;
363          m4t[2][2] = vw2->vdir[2];
364          m4t[3][2] = -DOT(vw2->vp,vw2->vdir);
365          multmat4(xfmat, xfmat, m4t);
366 +        return(1);
367   }
368  
369  
# Line 368 | Line 374 | float  *zline;
374   struct position *lasty;         /* input/output */
375   {
376          extern double   sqrt();
377 <        double  pos[3];
377 >        FVECT   pos;
378          struct position lastx, newpos;
379          register int    x;
380  
381          lastx.z = 0;
382          for (x = thresolu-1; x >= 0; x--) {
383 <                pos[0] = (x+.5)/thresolu + theirview.hoff - .5;
384 <                pos[1] = (y+.5)/tvresolu + theirview.voff - .5;
383 >                pos[0] = (x+.5)/thresolu;
384 >                pos[1] = (y+.5)/tvresolu;
385                  pos[2] = zline[x];
386 <                if (theirview.type == VT_PER) {
381 <                        if (normdist)   /* adjust for eye-ray distance */
382 <                                pos[2] /= sqrt( 1.
383 <                                        + pos[0]*pos[0]*theirview.hn2
384 <                                        + pos[1]*pos[1]*theirview.vn2 );
385 <                        pos[0] *= pos[2];
386 <                        pos[1] *= pos[2];
387 <                }
388 <                multp3(pos, pos, theirs2ours);
389 <                if (pos[2] <= 0) {
386 >                if (movepixel(pos) < 0) {
387                          lasty[x].z = lastx.z = 0;       /* mark invalid */
388                          continue;
389                  }
393                if (ourview.type == VT_PER) {
394                        pos[0] /= pos[2];
395                        pos[1] /= pos[2];
396                }
397                pos[0] += .5 - ourview.hoff;
398                pos[1] += .5 - ourview.voff;
390                  newpos.x = pos[0] * hresolu;
391                  newpos.y = pos[1] * vresolu;
392                  newpos.z = zline[x];
# Line 466 | Line 457 | double z;
457                          }
458                  }
459          }
460 + }
461 +
462 +
463 + movepixel(pos)                          /* reposition image point */
464 + FVECT   pos;
465 + {
466 +        FVECT   pt, direc;
467 +        
468 +        if (hasmatrix) {
469 +                pos[0] += theirview.hoff - .5;
470 +                pos[1] += theirview.voff - .5;
471 +                if (theirview.type == VT_PER) {
472 +                        if (normdist)   /* adjust for eye-ray distance */
473 +                                pos[2] /= sqrt( 1.
474 +                                        + pos[0]*pos[0]*theirview.hn2
475 +                                        + pos[1]*pos[1]*theirview.vn2 );
476 +                        pos[0] *= pos[2];
477 +                        pos[1] *= pos[2];
478 +                }
479 +                multp3(pos, pos, theirs2ours);
480 +                if (pos[2] <= 0)
481 +                        return(-1);
482 +                if (ourview.type == VT_PER) {
483 +                        pos[0] /= pos[2];
484 +                        pos[1] /= pos[2];
485 +                }
486 +                pos[0] += .5 - ourview.hoff;
487 +                pos[1] += .5 - ourview.voff;
488 +                return(0);
489 +        }
490 +        if (viewray(pt, direc, &theirview, pos[0], pos[1]) < 0)
491 +                return(-1);
492 +        pt[0] += direc[0]*pos[2];
493 +        pt[1] += direc[1]*pos[2];
494 +        pt[2] += direc[2]*pos[2];
495 +        viewpixel(&pos[0], &pos[1], &pos[2], &ourview, pt);
496 +        if (pos[2] <= 0)
497 +                return(-1);
498 +        return(0);
499   }
500  
501  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines