MobileRT  1.0
A multi platform C++ CPU progressive Ray Tracer.
Shader.hpp
Go to the documentation of this file.
1 #ifndef MOBILERT_SHADER_HPP
2 #define MOBILERT_SHADER_HPP
3 
7 #include "MobileRT/Camera.hpp"
9 #include "MobileRT/Ray.hpp"
10 #include "MobileRT/Sampler.hpp"
11 #include "MobileRT/Scene.hpp"
12 
13 namespace MobileRT {
18  class Shader {
19  public:
20  enum Accelerator {
21  ACC_NAIVE = 1,
24  };
25 
26  private:
30 
34 
38 
39  ::std::vector<Material> materials_ {};
40 
41  private:
43 
44  protected:
45  const ::std::int32_t samplesLight_ {};
46  ::std::vector<::std::unique_ptr<Light>> lights_ {};
47 
48  private:
49  Intersection traceLights(Intersection intersection) const;
50 
51  protected:
62  virtual bool shade(::glm::vec3 *rgb, const Intersection &intersection) = 0;
63 
64  static ::glm::vec3 getCosineSampleHemisphere(const ::glm::vec3 &normal);
65 
66  ::std::uint32_t getLightIndex ();
67 
68  public:
69  void initializeAccelerators(Scene scene);
70 
71  public:
72  explicit Shader () = delete;
73 
74  explicit Shader(Scene scene, ::std::int32_t samplesLight, Accelerator accelerator);
75 
76  Shader(const Shader &shader) = delete;
77 
78  Shader(Shader &&shader) noexcept = default;
79 
80  virtual ~Shader() = default;
81 
82  Shader &operator=(const Shader &shader) = delete;
83 
84  Shader &operator=(Shader &&shader) noexcept = delete;
85 
86  bool rayTrace(::glm::vec3 *rgb, Ray &&ray);
87 
88  bool shadowTrace(float distance, Ray &&ray);
89 
90  virtual void resetSampling();
91 
92  const ::std::vector<Plane>& getPlanes() const;
93 
94  const ::std::vector<Sphere>& getSpheres() const;
95 
96  const ::std::vector<Triangle>& getTriangles() const;
97 
98  const ::std::vector<Material>& getMaterials() const;
99 
100  const ::std::vector<::std::unique_ptr<Light>>& getLights() const;
101  };
102 }//namespace MobileRT
103 
104 #endif //MOBILERT_SHADER_HPP
const ::std::vector< Triangle > & getTriangles() const
Definition: Shader.cpp:284
Accelerator
Definition: Shader.hpp:20
const ::std::vector< Material > & getMaterials() const
Definition: Shader.cpp:315
Definition: Shader.hpp:18
virtual void resetSampling()
Definition: Shader.cpp:176
bool rayTrace(::glm::vec3 *rgb, Ray &&ray)
Definition: Shader.cpp:86
RegularGrid< Sphere > gridSpheres_
Definition: Shader.hpp:32
Definition: RegularGrid.hpp:24
RegularGrid< Triangle > gridTriangles_
Definition: Shader.hpp:33
void initializeAccelerators(Scene scene)
Definition: Shader.cpp:46
Definition: Intersection.hpp:14
Definition: Scene.hpp:20
virtual bool shade(::glm::vec3 *rgb, const Intersection &intersection)=0
const ::std::int32_t samplesLight_
Definition: Shader.hpp:45
Shader & operator=(const Shader &shader)=delete
Definition: Shader.hpp:22
Naive< Plane > naivePlanes_
Definition: Shader.hpp:27
BVH< Plane > bvhPlanes_
Definition: Shader.hpp:35
BVH< Sphere > bvhSpheres_
Definition: Shader.hpp:36
Intersection traceLights(Intersection intersection) const
Definition: Shader.cpp:166
const ::std::vector< Sphere > & getSpheres() const
Definition: Shader.cpp:262
::std::vector<::std::unique_ptr< Light > > lights_
Definition: Shader.hpp:46
const ::std::vector< Plane > & getPlanes() const
Definition: Shader.cpp:240
bool shadowTrace(float distance, Ray &&ray)
Definition: Shader.cpp:132
Definition: Ray.hpp:13
Naive< Triangle > naiveTriangles_
Definition: Shader.hpp:29
Definition: BVH.hpp:22
const Accelerator accelerator_
Definition: Shader.hpp:42
virtual ~Shader()=default
Definition: Shader.hpp:21
BVH< Triangle > bvhTriangles_
Definition: Shader.hpp:37
Naive< Sphere > naiveSpheres_
Definition: Shader.hpp:28
const ::std::vector<::std::unique_ptr< Light > > & getLights() const
Definition: Shader.cpp:306
::std::uint32_t getLightIndex()
Definition: Shader.cpp:223
Definition: Shader.hpp:23
RegularGrid< Plane > gridPlanes_
Definition: Shader.hpp:31
::glm::vec3 getCosineSampleHemisphere(const ::glm::vec3 &normal)
Definition: Shader.cpp:188
Definition: Naive.hpp:20
::std::vector< Material > materials_
Definition: Shader.hpp:39
Definition: AABB.cpp:105