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

Comparing ray/src/hd/rhdisp3.c (file contents):
Revision 3.5 by gregl, Mon Nov 24 15:17:41 1997 UTC vs.
Revision 3.7 by gregl, Wed Nov 26 20:12:19 1997 UTC

# Line 271 | Line 271 | VIEW   *vp;
271   memerr:
272          error(SYSTEM, "out of memory in getviewcells");
273   }
274 +
275 +
276 + gridlines(f)                    /* run through holodeck section grid lines */
277 + int     (*f)();
278 + {
279 +        register int    hd, w, i;
280 +        int     g0, g1;
281 +        FVECT   wp[2], mov;
282 +        double  d;
283 +                                        /* do each wall on each section */
284 +        for (hd = 0; hdlist[hd] != NULL; hd++)
285 +                for (w = 0; w < 6; w++) {
286 +                        g0 = ((w>>1)+1)%3;
287 +                        g1 = ((w>>1)+2)%3;
288 +                        d = 1.0/hdlist[hd]->grid[g0];
289 +                        mov[0] = d * hdlist[hd]->xv[g0][0];
290 +                        mov[1] = d * hdlist[hd]->xv[g0][1];
291 +                        mov[2] = d * hdlist[hd]->xv[g0][2];
292 +                        if (w & 1) {
293 +                                VSUM(wp[0], hdlist[hd]->orig,
294 +                                                hdlist[hd]->xv[w>>1], 1.);
295 +                                VSUM(wp[0], wp[0], mov, 1.);
296 +                        } else
297 +                                VCOPY(wp[0], hdlist[hd]->orig);
298 +                        VSUM(wp[1], wp[0], hdlist[hd]->xv[g1], 1.);
299 +                        for (i = hdlist[hd]->grid[g0]; ; ) {    /* g0 lines */
300 +                                (*f)(wp);
301 +                                if (!--i) break;
302 +                                wp[0][0] += mov[0]; wp[0][1] += mov[1];
303 +                                wp[0][2] += mov[2]; wp[1][0] += mov[0];
304 +                                wp[1][1] += mov[1]; wp[1][2] += mov[2];
305 +                        }
306 +                        d = 1.0/hdlist[hd]->grid[g1];
307 +                        mov[0] = d * hdlist[hd]->xv[g1][0];
308 +                        mov[1] = d * hdlist[hd]->xv[g1][1];
309 +                        mov[2] = d * hdlist[hd]->xv[g1][2];
310 +                        if (w & 1)
311 +                                VSUM(wp[0], hdlist[hd]->orig,
312 +                                                hdlist[hd]->xv[w>>1], 1.);
313 +                        else
314 +                                VSUM(wp[0], hdlist[hd]->orig, mov, 1.);
315 +                        VSUM(wp[1], wp[0], hdlist[hd]->xv[g0], 1.);
316 +                        for (i = hdlist[hd]->grid[g1]; ; ) {    /* g1 lines */
317 +                                (*f)(wp);
318 +                                if (!--i) break;
319 +                                wp[0][0] += mov[0]; wp[0][1] += mov[1];
320 +                                wp[0][2] += mov[2]; wp[1][0] += mov[0];
321 +                                wp[1][1] += mov[1]; wp[1][2] += mov[2];
322 +                        }
323 +                }
324 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines