ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/ray.h
Revision: 2.46
Committed: Fri Sep 23 21:53:34 2022 UTC (19 months, 3 weeks ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.45: +4 -6 lines
Log Message:
refactor: removed unreferenced external symbol

File Contents

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