ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/ray.h
Revision: 2.38
Committed: Tue Feb 24 19:39:27 2015 UTC (9 years, 2 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2, rad5R0, rad5R1
Changes since 2.37: +5 -1 lines
Log Message:
Initial check-in of photon map addition by Roland Schregle

File Contents

# User Rev Content
1 greg 2.38 /* RCSid $Id: ray.h,v 1.2 2014/09/24 10:56:35 taschreg Exp taschreg $ */
2 greg 1.1 /*
3     * ray.h - header file for routines using rays.
4 greg 2.12 */
5 schorsch 2.17 #ifndef _RAD_RAY_H_
6     #define _RAD_RAY_H_
7 greg 1.1
8     #include "standard.h"
9 greg 2.12 #include "octree.h"
10 greg 1.1 #include "object.h"
11 schorsch 2.20 #include "color.h"
12 greg 2.38 #include "pmapparm.h"
13 greg 1.1
14 schorsch 2.20 #ifdef __cplusplus
15     extern "C" {
16     #endif
17 greg 1.1
18 greg 2.30 #ifndef RNUMBER
19     #define RNUMBER unsigned long /* ray counter (>= sizeof pointer) */
20     #endif
21    
22 greg 2.6 #define MAXDIM 32 /* maximum number of dimensions */
23    
24 greg 1.1 /* ray type flags */
25     #define PRIMARY 01 /* original ray */
26     #define SHADOW 02 /* ray to light source */
27     #define REFLECTED 04 /* reflected ray */
28     #define REFRACTED 010 /* refracted (bent) ray */
29     #define TRANS 020 /* transmitted/transferred ray */
30     #define AMBIENT 040 /* ray scattered for interreflection */
31 greg 2.2 #define SPECULAR 0100 /* ray scattered for specular */
32 greg 1.1
33     /* reflected ray types */
34 greg 2.2 #define RAYREFL (SHADOW|REFLECTED|AMBIENT|SPECULAR)
35 greg 1.1
36 greg 2.29 /* Arrange so double's come first for optimal alignment */
37     /* Pointers and long's come second for 64-bit mode */
38     /* Int's next (unknown length), then floats, followed by short's & char's */
39 greg 1.1 typedef struct ray {
40 greg 2.12 FVECT rorg; /* origin of ray */
41     FVECT rdir; /* normalized direction of ray */
42 greg 2.29 RREAL rmax; /* maximum distance (aft clipping plane) */
43     RREAL rot; /* distance to object */
44     FVECT rop; /* intersection point */
45     FVECT ron; /* intersection surface normal */
46     RREAL rod; /* -DOT(rdir, ron) */
47     RREAL uv[2]; /* local coordinates */
48     FVECT pert; /* surface normal perturbation */
49     RREAL rt; /* returned effective ray length */
50     const struct ray *parent; /* ray this originated from */
51 greg 2.12 OBJECT *clipset; /* set of objects currently clipped */
52     OBJECT *newcset; /* next clipset, used for transmission */
53 greg 2.26 void (*revf)(struct ray *); /* ray evaluation function */
54 greg 2.21 void (*hitf)(OBJECT *, struct ray *); /* custom hit test */
55 greg 2.12 OBJREC *ro; /* intersected object (one with material) */
56     FULLXF *rox; /* object transformation */
57 greg 2.29 int *slights; /* list of lights to test for scattering */
58 greg 2.30 RNUMBER rno; /* unique ray number */
59 greg 2.29 int rlvl; /* number of reflections for this ray */
60     int rsrc; /* source we're aiming for */
61     float rweight; /* cumulative weight (for termination) */
62     COLOR rcoef; /* contribution coefficient w.r.t. parent */
63 greg 2.12 COLOR pcol; /* pattern color */
64 greg 2.24 COLOR rcol; /* returned radiance value */
65 greg 2.12 COLOR cext; /* medium extinction coefficient */
66     COLOR albedo; /* medium scattering albedo */
67     float gecc; /* scattering eccentricity coefficient */
68 greg 2.29 OBJECT robj; /* intersected object number */
69     short rtype; /* ray type */
70     short crtype; /* cumulative ray type */
71 greg 1.1 } RAY;
72    
73 greg 2.26 #define rayvalue(r) (*(r)->revf)(r)
74    
75 greg 2.12 extern char VersionID[]; /* Radiance version ID string */
76 greg 1.6
77 greg 2.12 extern CUBE thescene; /* our scene */
78     extern OBJECT nsceneobjs; /* number of objects in our scene */
79 greg 2.5
80 greg 2.35 extern RNUMBER raynum; /* next ray ID */
81     extern RNUMBER nrays; /* total rays traced so far */
82 greg 1.5
83 greg 2.12 extern OBJREC Lamb; /* a Lambertian surface */
84     extern OBJREC Aftplane; /* aft clipping object */
85    
86     extern void (*trace)(); /* global trace reporting callback */
87    
88     extern int dimlist[]; /* dimension list for distribution */
89     extern int ndims; /* number of dimensions so far */
90     extern int samplendx; /* index for this sample */
91    
92     extern int ray_savesiz; /* size of parameter save buffer */
93    
94     extern int do_irrad; /* compute irradiance? */
95    
96 greg 2.27 extern int rand_samp; /* pure Monte Carlo sampling? */
97    
98 greg 2.12 extern double dstrsrc; /* square source distribution */
99     extern double shadthresh; /* shadow threshold */
100     extern double shadcert; /* shadow testing certainty */
101     extern int directrelay; /* number of source relays */
102     extern int vspretest; /* virtual source pretest density */
103     extern int directvis; /* light sources visible to eye? */
104     extern double srcsizerat; /* maximum source size/dist. ratio */
105    
106     extern double specthresh; /* specular sampling threshold */
107     extern double specjitter; /* specular sampling jitter */
108    
109     extern COLOR cextinction; /* global extinction coefficient */
110     extern COLOR salbedo; /* global scattering albedo */
111     extern double seccg; /* global scattering eccentricity */
112     extern double ssampdist; /* scatter sampling distance */
113    
114     extern int backvis; /* back face visibility */
115    
116     extern int maxdepth; /* maximum recursion depth */
117     extern double minweight; /* minimum ray weight */
118    
119     extern char *ambfile; /* ambient file name */
120     extern COLOR ambval; /* ambient value */
121     extern int ambvwt; /* initial weight for ambient value */
122     extern double ambacc; /* ambient accuracy */
123     extern int ambres; /* ambient resolution */
124     extern int ambdiv; /* ambient divisions */
125     extern int ambssamp; /* ambient super-samples */
126     extern int ambounce; /* ambient bounces */
127     extern char *amblist[]; /* ambient include/exclude list */
128     extern int ambincl; /* include == 1, exclude == 0 */
129    
130     extern int ray_pnprocs; /* number of child processes */
131     extern int ray_pnidle; /* number of idle processes */
132    
133 greg 2.23 #ifndef AMBLLEN
134     #define AMBLLEN 512 /* max. ambient list length */
135     #endif
136     #define AMBWORD 12 /* average word length */
137 greg 2.12
138     typedef struct { /* rendering parameter holder */
139     int do_irrad;
140 greg 2.27 int rand_samp;
141 greg 2.12 double dstrsrc;
142     double shadthresh;
143     double shadcert;
144     int directrelay;
145     int vspretest;
146     int directvis;
147     double srcsizerat;
148     COLOR cextinction;
149     COLOR salbedo;
150     double seccg;
151     double ssampdist;
152     double specthresh;
153     double specjitter;
154     int backvis;
155     int maxdepth;
156     double minweight;
157     char ambfile[512];
158     COLOR ambval;
159     int ambvwt;
160     double ambacc;
161     int ambres;
162     int ambdiv;
163     int ambssamp;
164     int ambounce;
165     int ambincl;
166     short amblndx[AMBLLEN+1];
167     char amblval[AMBLLEN*AMBWORD];
168 greg 2.38
169     /* PMAP: photon mapping parameters */
170     PhotonMapParams pmapParams [NUM_PMAP_TYPES];
171 greg 2.12 } RAYPARAMS;
172    
173     #define rpambmod(p,i) ( (i)>=AMBLLEN||(p)->amblndx[i]<0 ? \
174     (char *)NULL : (p)->amblval+(p)->amblndx[i] )
175    
176     /* defined in duphead.c */
177     extern void headclean(void);
178     extern void openheader(void);
179     extern void dupheader(void);
180 schorsch 2.22 /* defined in persist.c */
181     extern void persistfile(char *pfn);
182 greg 2.12 extern void pfdetach(void);
183     extern void pfclean(void);
184     extern void pflock(int lf);
185     extern void pfhold(void);
186     extern void io_process(void);
187     /* defined in freeobjmem.c */
188     extern int free_objs(OBJECT on, OBJECT no);
189     extern void free_objmem(void);
190     /* defined in preload.c */
191     extern int load_os(OBJREC *op);
192     extern void preload_objs(void);
193     /* defined in raycalls.c */
194     extern void ray_init(char *otnm);
195     extern void ray_trace(RAY *r);
196     extern void ray_done(int freall);
197     extern void ray_save(RAYPARAMS *rp);
198     extern void ray_restore(RAYPARAMS *rp);
199     extern void ray_defaults(RAYPARAMS *rp);
200     /* defined in raypcalls.c */
201     extern void ray_pinit(char *otnm, int nproc);
202 greg 2.33 extern int ray_psend(RAY *r);
203 greg 2.12 extern int ray_pqueue(RAY *r);
204     extern int ray_presult(RAY *r, int poll);
205     extern void ray_pdone(int freall);
206     extern void ray_popen(int nadd);
207     extern void ray_pclose(int nsub);
208 greg 2.31 /* defined in ray_fifo.c */
209     extern int (*ray_fifo_out)(RAY *r);
210     extern int ray_fifo_in(RAY *r);
211     extern int ray_fifo_flush(void);
212 greg 2.12 /* defined in raytrace.c */
213 greg 2.25 extern int rayorigin(RAY *r, int rt, const RAY *ro, const COLOR rc);
214 greg 2.12 extern void rayclear(RAY *r);
215 greg 2.26 extern void raytrace(RAY *r);
216 greg 2.14 extern void rayhit(OBJECT *oset, RAY *r);
217 greg 2.12 extern void raycont(RAY *r);
218     extern void raytrans(RAY *r);
219     extern int rayshade(RAY *r, int mod);
220     extern void rayparticipate(RAY *r);
221 greg 2.16 extern void raytexture(RAY *r, OBJECT mod);
222 greg 2.12 extern int raymixture(RAY *r, OBJECT fore, OBJECT back, double coef);
223 greg 2.36 extern void raycontrib(RREAL rc[3], const RAY *r, int flags);
224 greg 2.25 extern double raydist(const RAY *r, int flags);
225 greg 2.12 extern double raynormal(FVECT norm, RAY *r);
226     extern void newrayxf(RAY *r);
227     extern void flipsurface(RAY *r);
228     extern int localhit(RAY *r, CUBE *scene);
229     /* defined in renderopts.c */
230     extern int getrenderopt(int ac, char *av[]);
231     extern void print_rdefaults(void);
232     /* defined in srcdraw.c */
233     extern void drawsources(COLOR *pic[], float *zbf[],
234     int x0, int xsiz, int y0, int ysiz);
235 schorsch 2.22 extern void init_drawsources(int rad);
236     /* defined in rt/initotypes.c */
237     extern void initotypes(void);
238 greg 2.12 /* module main procedures */
239 greg 2.32 extern void rtrace(char *fname, int nproc);
240     extern char *formstr(int f);
241 greg 2.12 extern void rview(void);
242     extern void rpict(int seq, char *pout, char *zout, char *prvr);
243 greg 1.6
244 greg 2.34 #ifdef __FAST_MATH__
245 greg 2.37 #define checknorm(vn) (void)normalize(vn)
246 greg 2.34 #else
247 greg 2.37 #define checknorm(vn)
248 greg 2.34 #endif
249 schorsch 2.17
250     #ifdef __cplusplus
251     }
252 greg 2.12 #endif
253 schorsch 2.17 #endif /* _RAD_RAY_H_ */
254