ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/rhpict2.c
Revision: 3.1
Committed: Thu Mar 4 10:30:04 1999 UTC (25 years, 1 month ago) by gwlarson
Content type: text/plain
Branch: MAIN
Log Message:
Initial revision

File Contents

# Content
1 /* Copyright (c) 1999 Silicon Graphics, Inc. */
2
3 #ifndef lint
4 static char SCCSid[] = "$SunId$ SGI";
5 #endif
6
7 /*
8 * Rendering routines for rhpict.
9 */
10
11 #include "holo.h"
12 #include "view.h"
13
14 extern VIEW myview; /* current output view */
15 extern COLOR *mypixel; /* pixels being rendered */
16 extern float *myweight; /* weights (used to compute final pixels) */
17 extern int hres, vres; /* current horizontal and vertical res. */
18
19
20 render_beam(bp, hb) /* render a particular beam */
21 BEAM *bp;
22 register HDBEAMI *hb;
23 {
24 GCOORD gc[2];
25 register RAYVAL *rv;
26 FVECT rorg, rdir, wp, ip;
27 double d, prox;
28 COLOR col;
29 int n, p;
30
31 if (!hdbcoord(gc, hb->h, hb->b))
32 error(CONSISTENCY, "bad beam in render_beam");
33 for (n = bp->nrm, rv = hdbray(bp); n--; rv++) {
34 /* reproject each sample */
35 hdray(rorg, rdir, hb->h, gc, rv->r);
36 if (rv->d < DCINF) {
37 d = hddepth(hb->h, rv->d);
38 VSUM(wp, rorg, rdir, d);
39 VSUB(ip, wp, myview.vp);
40 d = DOT(ip,rdir);
41 prox = 1. - d*d/DOT(ip,ip); /* sin(diff_angle)^2 */
42 } else {
43 if (myview.type == VT_PAR || myview.vaft > FTINY)
44 continue; /* inf. off view */
45 VSUM(wp, myview.vp, rdir, FHUGE);
46 prox = 0.;
47 }
48 viewloc(ip, &myview, wp); /* frustum clipping */
49 if (ip[2] < 0.)
50 continue;
51 if (ip[0] < 0. || ip[0] >= 1.)
52 continue;
53 if (ip[1] < 0. || ip[1] >= 1.)
54 continue;
55 if (myview.vaft > FTINY && ip[2] > myview.vaft - myview.vfore)
56 continue;
57 /* we're in! */
58 p = (int)(ip[1]*vres)*hres + (int)(ip[0]*hres);
59 colr_color(col, rv->v);
60 addcolor(mypixel[p], col);
61 myweight[p] += 1.0;
62 }
63 }