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.2 by greg, Tue Dec 12 11:21:25 1989 UTC vs.
Revision 1.4 by greg, Wed Dec 13 12:41:25 1989 UTC

# Line 17 | Line 17 | static char SCCSid[] = "$SunId$ LBL";
17   #define pscan(y)        (ourpict+(y)*ourview.hresolu)
18   #define zscan(y)        (ourzbuf+(y)*ourview.hresolu)
19  
20 + #define ABS(x)          ((x)>0?(x):-(x))
21 +
22   VIEW    ourview = STDVIEW(512);         /* desired view */
23  
24   double  zeps = 0.001;                   /* allowed z epsilon */
# Line 261 | Line 263 | fillpicture()                          /* fill in empty spaces */
263                  return;
264          }
265          for (x = 0; x < ourview.hresolu; x++)
266 <                yback[x] = -1;
266 >                yback[x] = -2;
267                                                          /* fill image */
268 <        for (y = 0; y < ourview.vresolu; y++)
268 >        for (y = 0; y < ourview.vresolu; y++) {
269 >                xback = -2;
270                  for (x = 0; x < ourview.hresolu; x++)
271 <                        if (zscan(y)[x] <= 0.0) {       /* found hole */
272 <                                xback = x-1;
273 <                                do {                    /* find boundary */
274 <                                        if (yback[x] < 0) {
275 <                                                for (i = y+1;
276 <                                                        i < ourview.vresolu;
274 <                                                                i++)
275 <                                                        if (zscan(i)[x] > 0.0)
276 <                                                                break;
277 <                                                if (i < ourview.vresolu
271 >                        if (zscan(y)[x] <= 0.0) {       /* empty pixel */
272 >                                if (yback[x] == -2) {
273 >                                        for (i = y+1; i < ourview.vresolu; i++)
274 >                                                if (zscan(i)[x] > 0.0)
275 >                                                        break;
276 >                                        if (i < ourview.vresolu
277                                  && (y <= 0 || zscan(y-1)[x] < zscan(i)[x]))
278 <                                                        yback[x] = i;
279 <                                                else
280 <                                                        yback[x] = y-1;
282 <                                        }
283 <                                } while (++x < ourview.hresolu
284 <                                                && zscan(y)[x] <= 0.0);
285 <                                i = xback;              /* pick background */
286 <                                if (x < ourview.hresolu
287 <                        && (i < 0 || zscan(y)[i] < zscan(y)[x]))
288 <                                        xback = x;
289 <                                                        /* fill hole */
290 <                                if (xback < 0) {
291 <                                        while (++i < x)
292 <                                                if (yback[i] >= 0)
293 <                                copycolr(pscan(y)[i],pscan(yback[i])[i]);
294 <                                } else {
295 <                                        while (++i < x)
296 <                                                if (yback[i] < 0 ||
297 <                                zscan(yback[i])[i] < zscan(y)[xback])
298 <                                        copycolr(pscan(y)[i],pscan(y)[xback]);
299 <                                                else
300 <                                        copycolr(pscan(y)[i],pscan(yback[i])[i]);
278 >                                                yback[x] = i;
279 >                                        else
280 >                                                yback[x] = y-1;
281                                  }
282 <                } else
283 <                        yback[x] = -1;                  /* clear boundary */
282 >                                if (xback == -2) {
283 >                                        for (i = x+1; x < ourview.hresolu; i++)
284 >                                                if (zscan(y)[i] > 0.0)
285 >                                                        break;
286 >                                        if (i < ourview.hresolu
287 >                                && (x <= 0 || zscan(y)[x-1] < zscan(y)[i]))
288 >                                                xback = i;
289 >                                        else
290 >                                                xback = x-1;
291 >                                }
292 >                                if (xback < 0 && yback[x] < 0)
293 >                                        continue;
294 >                                if (yback[x] < 0 || ABS(x-xback) <= 1
295 >                                        || ( ABS(y-yback[x]) > 1
296 >                                && zscan(yback[x])[x] < zscan(y)[xback] ))
297 >                                        copycolr(pscan(y)[x],pscan(y)[xback]);
298 >                                else
299 >                                        copycolr(pscan(y)[x],pscan(yback[x])[x]);
300 >                        } else {                                /* full pixel */
301 >                                yback[x] = -2;
302 >                                xback = -2;
303 >                        }
304 >        }
305          free((char *)yback);
306   }
307  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines