ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/pmapsrc.h
Revision: 2.2
Committed: Fri May 8 13:20:23 2015 UTC (9 years ago) by rschregle
Content type: text/plain
Branch: MAIN
Changes since 2.1: +3 -2 lines
Log Message:
Double-counting bugfix for glow sources (thanks DGM!), revised copyright

File Contents

# User Rev Content
1 greg 2.1 /*
2     ==================================================================
3     Photon map support routines for emission from light sources
4    
5     Roland Schregle (roland.schregle@{hslu.ch, gmail.com})
6     (c) Fraunhofer Institute for Solar Energy Systems,
7 rschregle 2.2 (c) Lucerne University of Applied Sciences and Arts,
8     supported by the Swiss National Science Foundation (SNSF, #147053)
9 greg 2.1 ==================================================================
10    
11 rschregle 2.2 $Id: pmapsrc.h,v 2.1 2015/02/24 19:39:27 greg Exp $
12 greg 2.1 */
13    
14    
15    
16     #ifndef PMAPSRC_H
17     #define PMAPSRC_H
18    
19     #include "ray.h"
20     #include "source.h"
21    
22    
23    
24     /* Data structures for photon emission */
25     typedef struct {
26     unsigned theta, phi; /* Direction indices */
27     COLOR pdf; /* Probability of emission in this
28     direction per RGB */
29     float cdf; /* Cumulative probability up to
30     this sample */
31     } EmissionSample;
32    
33     typedef struct {
34     unsigned numTheta, numPhi; /* Num divisions in theta & phi */
35     RREAL cosThetaMax; /* cos(source aperture) */
36     FVECT uh, vh, wh; /* Emission aperture axes at origin,
37     w is normal*/
38     FVECT us, vs, ws; /* Source surface axes at origin,
39     w is normal */
40     FVECT photonOrg; /* Current photon origin */
41     EmissionSample *samples; /* PDF samples for photon emission
42     directions */
43     unsigned long numPartitions; /* Number of surface partitions */
44     RREAL partArea; /* Area covered by each partition */
45     SRCREC *src, *port; /* Current source and port */
46     unsigned long partitionCnt, /* Current surface partition */
47     maxPartitions, /* Max allocated partitions */
48     numSamples; /* Number of PDF samples */
49     unsigned char* partitions; /* Source surface partitions */
50     COLOR partFlux; /* Total flux emitted by partition */
51     float cdf; /* Cumulative probability */
52     } EmissionMap;
53    
54    
55    
56     /* Photon port list for emission from geometry en lieu of light sources */
57     extern SRCREC *photonPorts;
58     extern unsigned numPhotonPorts;
59    
60     /* Dispatch tables for partitioning light source surfaces and generating
61     an origin for photon emission */
62     extern void (*photonPartition []) (EmissionMap*);
63     extern void (*photonOrigin []) (EmissionMap*);
64    
65    
66    
67     void getPhotonPorts ();
68     /* Find geometry declared as photon ports */
69    
70     void initPhotonEmissionFuncs ();
71     /* Init photonPartition[] and photonOrigin[] dispatch tables with source
72     specific emission routines */
73    
74     void initPhotonEmission (EmissionMap *emap, float numPdfSamples);
75     /* Initialize photon emission from partitioned light source emap -> src;
76     * this involves integrating the flux emitted from the current photon
77     * origin emap -> photonOrg and setting up a PDF to sample the emission
78     * distribution with numPdfSamples samples */
79    
80     void emitPhoton (const EmissionMap*, RAY* ray);
81     /* Emit photon from current source partition based on emission
82     distribution and return new photon ray */
83    
84     void multDirectPmap (RAY *r);
85     /* Factor irradiance from direct photons into r -> rcol; interface to
86     * direct() */
87    
88     void inscatterVolumePmap (RAY *r, COLOR inscatter);
89     /* Add inscattering from volume photon map; interface to srcscatter() */
90    
91     #endif