00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef LUX_TRANSPORT_H
00024 #define LUX_TRANSPORT_H
00025
00026 #include "lux.h"
00027 #include "spectrum.h"
00028
00029 namespace lux
00030 {
00031
00032
00033 class Integrator {
00034 public:
00035
00036 virtual ~Integrator();
00037 virtual void Preprocess(const TsPack *tspack, const Scene *scene) {
00038 }
00039 virtual void RequestSamples(Sample *sample,
00040 const Scene *scene) {
00041 }
00042 };
00043
00044 class SurfaceIntegrator : public Integrator {
00045 public:
00046 virtual int Li(const TsPack *tspack, const Scene *scene,
00047 const Sample *sample) const = 0;
00048 };
00049
00050 class VolumeIntegrator : public Integrator {
00051 public:
00052 virtual int Li(const TsPack *tspack, const Scene *scene,
00053 const RayDifferential &ray, const Sample *sample,
00054 SWCSpectrum *L, float *alpha) const = 0;
00055
00056 virtual void Transmittance(const TsPack *tspack, const Scene *scene,
00057 const Ray &ray, const Sample *sample, float *alpha, SWCSpectrum *const L) const = 0;
00058 };
00059
00060 SWCSpectrum EstimateDirect(const TsPack *tspack, const Scene *scene, const Light *light,
00061 const Point &p, const Normal &n, const Vector &wo, BSDF *bsdf,
00062 const Sample *sample,
00063 float &ls1, float &ls2, float &ls3, float &bs1, float &bs2, float &bcs);
00064 SWCSpectrum UniformSampleAllLights(const TsPack *tspack, const Scene *scene, const Point &p,
00065 const Normal &n, const Vector &wo, BSDF *bsdf,
00066 const Sample *sample, float *lightSample = NULL,
00067 float *lightNum = NULL, float *bsdfSample = NULL,
00068 float *bsdfComponent = NULL);
00069 int UniformSampleOneLight(const TsPack *tspack, const Scene *scene, const Point &p,
00070 const Normal &n, const Vector &wo, BSDF *bsdf,
00071 const Sample *sample, float *lightSample,
00072 float *lightNum, float *bsdfSample,
00073 float *bsdfComponent, SWCSpectrum *L);
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 }
00085
00086 #endif // LUX_TRANSPORT_H