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.1 by greg, Sun Dec 10 17:34:13 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 250 | Line 252 | float  *zline;
252  
253   fillpicture()                           /* fill in empty spaces */
254   {
255 +        int     *yback, xback;
256          int     y;
257 <        COLR    cfill;
258 <        register int    x, xblank;
259 <        
257 >        COLR    pfill;
258 >        register int    x, i;
259 >                                                        /* get back buffer */
260 >        yback = (int *)malloc(ourview.hresolu*sizeof(int));
261 >        if (yback == NULL) {
262 >                perror(progname);
263 >                return;
264 >        }
265 >        for (x = 0; x < ourview.hresolu; x++)
266 >                yback[x] = -2;
267 >                                                        /* fill image */
268          for (y = 0; y < ourview.vresolu; y++) {
269 <                xblank = -1;
269 >                xback = -2;
270                  for (x = 0; x < ourview.hresolu; x++)
271 <                        if (zscan(y)[x] <= 0.0) {
272 <                                if (xblank < 0)
273 <                                        xblank = x;
274 <                        } else if (xblank >= 0) {
275 <                                if (xblank == 0 || zscan(y)[xblank-1] < zscan(y)[x])
276 <                                        copycolr(cfill, pscan(y)[x]);
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;
281 >                                }
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(cfill, pscan(y)[xblank-1]);
300 <                                for ( ; xblank < x; xblank++)
301 <                                        copycolr(pscan(y)[xblank], cfill);
302 <                                xblank = -1;
299 >                                        copycolr(pscan(y)[x],pscan(yback[x])[x]);
300 >                        } else {                                /* full pixel */
301 >                                yback[x] = -2;
302 >                                xback = -2;
303                          }
272                if (xblank > 0) {
273                        copycolr(cfill, pscan(y)[xblank-1]);
274                        for ( ; xblank < ourview.hresolu; xblank++)
275                                copycolr(pscan(y)[xblank], cfill);
276                }
304          }
305 +        free((char *)yback);
306   }
307  
308  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines