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

Comparing ray/src/hd/holo.c (file contents):
Revision 3.2 by gregl, Mon Nov 3 11:03:23 1997 UTC vs.
Revision 3.4 by gregl, Tue Nov 11 14:40:59 1997 UTC

# Line 104 | Line 104 | HDGRID *hproto;
104  
105  
106   hdbcoord(gc, hp, i)             /* compute beam coordinates from index */
107 < BCOORD  gc;             /* returned */
107 > GCOORD  gc[2];          /* returned */
108   register HOLO   *hp;
109   register int    i;
110   {
111          register int    j, n;
112          int     n2, reverse;
113 <        BCOORD  g2;
113 >        GCOORD  g2[2];
114                                          /* check range */
115          if (i < 1 | i > nbeams(hp))
116                  return(0);
# Line 150 | Line 150 | register int   i;
150   int
151   hdbindex(hp, gc)                /* compute index from beam coordinates */
152   register HOLO   *hp;
153 < register BCOORD gc;
153 > register GCOORD gc[2];
154   {
155 <        BCOORD  g2;
155 >        GCOORD  g2[2];
156          int     reverse;
157          register int    i, j;
158                                          /* check ordering and limits */
# Line 178 | Line 178 | register BCOORD        gc;
178   }
179  
180  
181 + hdcell(cp, hp, gc)              /* compute cell coordinates */
182 + register FVECT  cp[4];  /* returned (may be passed as FVECT cp[2][2]) */
183 + HOLO    *hp;
184 + register GCOORD *gc;
185 + {
186 +        register int    i;
187 +        register FLOAT  *v;
188 +        double  d;
189 +                                        /* compute each corner */
190 +        for (i = 0; i < 4; i++) {
191 +                VCOPY(cp[i], hp->orig);
192 +                if (gc->w & 1) {
193 +                        v = hp->xv[gc->w>>1];
194 +                        cp[i][0] += *v++; cp[i][1] += *v++; cp[i][2] += *v;
195 +                }
196 +                d = (double)( gc->i[0] + (i&1) ) / hp->grid[wg0[gc->w]];
197 +                v = hp->xv[wg0[gc->w]];
198 +                cp[i][0] += d * *v++; cp[i][1] += d * *v++; cp[i][2] += d * *v;
199 +
200 +                d = (double)( gc->i[1] + (i>>1) ) / hp->grid[wg1[gc->w]];
201 +                v = hp->xv[wg1[gc->w]];
202 +                cp[i][0] += d * *v++; cp[i][1] += d * *v++; cp[i][2] += d * *v;
203 +        }
204 + }
205 +
206 +
207   hdlseg(lseg, hp, i)                     /* compute line segment for beam */
208   register int    lseg[2][3];
209   register HOLO   *hp;
210   int     i;
211   {
212 <        BCOORD  gc;
212 >        GCOORD  gc[2];
213          register int    k;
214  
215          if (!hdbcoord(gc, hp, i))               /* compute grid coordinates */
# Line 220 | Line 246 | double
246   hdray(ro, rd, hp, gc, r)        /* compute ray within a beam */
247   FVECT   ro, rd;         /* returned */
248   register HOLO   *hp;
249 < register BCOORD gc;
249 > register GCOORD gc[2];
250   BYTE    r[2][2];
251   {
252          FVECT   p[2];
# Line 238 | Line 264 | BYTE   r[2][2];
264                                  hp->grid[wg0[gc[i].w]];
265                  v = hp->xv[wg0[gc[i].w]];
266                  p[i][0] += d * *v++; p[i][1] += d * *v++; p[i][2] += d * *v;
267 <                d = (gc[i].i[1] + (1./256.)*(r[i][1]+.5)) /
267 >                d = ( gc[i].i[1] + (1./256.)*(r[i][1]+.5) ) /
268                                  hp->grid[wg1[gc[i].w]];
269                  v = hp->xv[wg1[gc[i].w]];
270                  p[i][0] += d * *v++; p[i][1] += d * *v++; p[i][2] += d * *v;
# Line 253 | Line 279 | BYTE   r[2][2];
279  
280   double
281   hdinter(gc, r, hp, ro, rd)      /* compute ray intersection with section */
282 < register BCOORD gc;     /* returned */
282 > register GCOORD gc[2];  /* returned */
283   BYTE    r[2][2];        /* returned */
284   register HOLO   *hp;
285   FVECT   ro, rd;         /* rd should be normalized */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines