ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/ray.h
Revision: 2.29
Committed: Fri Sep 23 19:04:53 2005 UTC (18 years, 7 months ago) by greg
Content type: text/plain
Branch: MAIN
CVS Tags: rad3R8, rad3R9
Changes since 2.28: +22 -19 lines
Log Message:
Rearranged some struct's for better efficiency on 64-bit architectures

File Contents

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