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.4 by gregl, Tue Nov 11 14:40:59 1997 UTC vs.
Revision 3.5 by gregl, Tue Nov 11 15:14:02 1997 UTC

# Line 180 | Line 180 | register GCOORD        gc[2];
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;
183 > register HOLO   *hp;
184   register GCOORD *gc;
185   {
186        register int    i;
186          register FLOAT  *v;
187          double  d;
188 <                                        /* compute each corner */
189 <        for (i = 0; i < 4; i++) {
190 <                VCOPY(cp[i], hp->orig);
191 <                if (gc->w & 1) {
192 <                        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;
188 >                                        /* compute common component */
189 >        VCOPY(cp[0], hp->orig);
190 >        if (gc->w & 1) {
191 >                v = hp->xv[gc->w>>1];
192 >                cp[0][0] += v[0]; cp[0][1] += v[1]; cp[0][2] += v[2];
193          }
194 +        v = hp->xv[wg0[gc->w]];
195 +        d = (double)gc->i[0] / hp->grid[wg0[gc->w]];
196 +        VSUM(cp[0], cp[0], v, d);
197 +        v = hp->xv[wg1[gc->w]];
198 +        d = (double)gc->i[1] / hp->grid[wg1[gc->w]];
199 +        VSUM(cp[0], cp[0], v, d);
200 +                                        /* compute x1 sums */
201 +        v = hp->xv[wg0[gc->w]];
202 +        d = 1.0 / hp->grid[wg0[gc->w]];
203 +        VSUM(cp[1], cp[0], v, d);
204 +        VSUM(cp[3], cp[0], v, d);
205 +                                        /* compute y1 sums */
206 +        v = hp->xv[wg1[gc->w]];
207 +        d = 1.0 / hp->grid[wg1[gc->w]];
208 +        VSUM(cp[2], cp[0], v, d);
209 +        VSUM(cp[3], cp[3], v, d);
210   }
211  
212  
# Line 245 | Line 251 | double d;
251   double
252   hdray(ro, rd, hp, gc, r)        /* compute ray within a beam */
253   FVECT   ro, rd;         /* returned */
254 < register HOLO   *hp;
255 < register GCOORD gc[2];
254 > HOLO    *hp;
255 > GCOORD  gc[2];
256   BYTE    r[2][2];
257   {
258 <        FVECT   p[2];
259 <        register int    i;
260 <        register FLOAT  *v;
255 <        double  d;
258 >        FVECT   cp[4], p[2];
259 >        register int    i, j;
260 >        double  d0, d1;
261                                          /* compute entry and exit points */
262          for (i = 0; i < 2; i++) {
263 <                VCOPY(p[i], hp->orig);
264 <                if (gc[i].w & 1) {
265 <                        v = hp->xv[gc[i].w>>1];
266 <                        p[i][0] += *v++; p[i][1] += *v++; p[i][2] += *v;
267 <                }
268 <                d = ( gc[i].i[0] + (1./256.)*(r[i][0]+.5) ) /
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) ) /
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;
263 >                hdcell(cp, hp, gc+i);
264 >                d0 = (1./256.)*(r[i][0]+.5);
265 >                d1 = (1./256.)*(r[i][1]+.5);
266 >                for (j = 0; j < 3; j++)
267 >                        p[i][j] = (1.-d0-d1)*cp[0][j] +
268 >                                        d0*cp[1][j] + d1*cp[2][j];
269          }
270          VCOPY(ro, p[0]);                /* assign ray origin and direction */
271          rd[0] = p[1][0] - p[0][0];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines