The spica renderer
grid.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_MEDIUM_GRID_H_
6 #define _SPICA_MEDIUM_GRID_H_
7 
8 #include "../math/transform.h"
9 
10 #include "medium.h"
11 
12 namespace spica {
13 
14 class SPICA_EXPORTS GridDensityMedium : public Medium {
15 public:
16  // Public methods
17  GridDensityMedium(const Spectrum& sigmaAbsorb,
18  const Spectrum& sigmaScatter, double g,
19  int nx, int ny, int nz, const Transform& mediumToWorld,
20  const std::vector<double>& data);
21 
22  double density(const Point3d& p) const;
23  double D(const Point3i& p) const;
24 
25  Spectrum sample(const Ray& ray, Sampler& sampler, MemoryArena& arena,
26  MediumInteraction* mi) const override;
27 
28  Spectrum Tr(const Ray& ray, Sampler& sampler) const override;
29 
30 private:
31  // Private fields
32  const Spectrum sigmaAbsorb_, sigmaScatter_;
33  const double g_;
34  const int nx_, ny_, nz_;
35  const Transform worldToMedium_;
36  std::unique_ptr<double[]> density_;
37  double sigmaExtinct_;
38  double invMaxDensity_;
39 };
40 
41 } // namespace spica
42 
43 #endif // _SPICA_MEDIUM_GRID_H_
Random sampler class.
Definition: sampler.h:24
RGB spectrum.
Definition: spectrum.h:18
Ray class.
Definition: ray.h:24
The transformation operator class.
Definition: transform.h:17
Definition: grid.h:14
Definition: interaction.h:126
Definition: medium.h:19