The spica renderer
medium.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_MEDIUM_H_
6 #define _SPICA_MEDIUM_H_
7 
8 #include <memory>
9 
10 #include "core/core.hpp"
11 #include "core/common.h"
12 #include "core/cobject.h"
13 #include "core/spectrum.h"
14 
15 #include "core/render.hpp"
16 
17 namespace spica {
18 
19 class SPICA_EXPORTS Medium : public CObject {
20 public:
21  virtual Spectrum Tr(const Ray& ray, Sampler& sampler) const = 0;
22  virtual Spectrum sample(const Ray& ray, Sampler& sampler,
23  MemoryArena& arena, MediumInteraction* mi) const = 0;
24 }; // class Medium
25 
27 public:
29  : inside_{ nullptr }
30  , outside_{ nullptr } {
31  }
32 
33  explicit MediumInterface(const Medium *medium)
34  : inside_{ medium }
35  , outside_{ medium } {
36  }
37 
38  MediumInterface(const Medium *inside,
39  const Medium *outside)
40  : inside_{ inside }
41  , outside_{ outside } {
42  }
43 
44  bool isMediumTransition() const { return inside_ != outside_; }
45 
46  inline const Medium* inside() const { return inside_; }
47  inline const Medium* outside() const { return outside_; }
48 
49 private:
50  const Medium *inside_;
51  const Medium *outside_;
52 
53 }; // class MediumInterface
54 
55 } // namespace spica
56 
57 #endif // _SPICA_MEDIUM_H_
Random sampler class.
Definition: sampler.h:24
RGB spectrum.
Definition: spectrum.h:18
Ray class.
Definition: ray.h:24
Definition: cobject.h:24
Definition: medium.h:26
Definition: interaction.h:126
Definition: medium.h:19