Lightmetrica  0.0.1.50dbee3 (yosakoi)
 All Classes Functions Variables Typedefs Enumerations Enumerator
scene.h
1 /*
2  Lightmetrica : A research-oriented renderer
3 
4  Copyright (c) 2014 Hisanari Otsu
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 #ifndef LIB_LIGHTMETRICA_SCENE_H
22 #define LIB_LIGHTMETRICA_SCENE_H
23 
24 #include "component.h"
25 #include "math.types.h"
26 #include "aabb.h"
27 #include <string>
28 #include <functional>
29 #include <memory>
30 #include <boost/signals2.hpp>
31 
32 LM_NAMESPACE_BEGIN
33 
34 class Assets;
35 class ConfigNode;
36 class Camera;
37 class Light;
38 class Primitives;
39 struct Primitive;
40 struct Ray;
41 struct Intersection;
42 
47 class Scene : public Component
48 {
49 public:
50 
51  LM_COMPONENT_INTERFACE_DEF("scene");
52 
53 public:
54 
55  LM_PUBLIC_API Scene();
56  LM_PUBLIC_API virtual ~Scene();
57 
58 private:
59 
60  LM_DISABLE_COPY_AND_MOVE(Scene);
61 
62 public:
63 
69  LM_PUBLIC_API void Load(Primitives* primitives);
70 
77  LM_PUBLIC_API bool PostConfigure();
78 
88  LM_PUBLIC_API bool Intersect(Ray& ray, Intersection& isect) const;
89 
94  LM_PUBLIC_API const Camera* MainCamera() const;
95 
104  LM_PUBLIC_API const Light* SampleLightSelection(Math::Vec2& lightSampleP, Math::PDFEval& selectionPdf) const;
105 
112  LM_PUBLIC_API const Light* SampleLightSelection(const Math::Float& lightSample, Math::PDFEval& selectionPdf) const;
113 
118  LM_PUBLIC_API Math::PDFEval LightSelectionPdf() const;
119 
124  LM_PUBLIC_API AABB GetAABB() const;
125 
126 public:
127 
134  virtual bool Configure( const ConfigNode& node) = 0;
135 
144  virtual bool Build() = 0;
145 
156  virtual bool IntersectTriangles(Ray& ray, Intersection& isect) const = 0;
157 
162  virtual AABB GetAABBTriangles() const = 0;
163 
164 public:
165 
171  virtual boost::signals2::connection Connect_ReportBuildProgress(const std::function<void (double, bool)>& func) = 0;
172 
173 protected:
174 
185  void StoreIntersectionFromBarycentricCoords(unsigned int primitiveIndex, unsigned int triangleIndex, const Ray& ray, const Math::Vec2& b, Intersection& isect) const;
186 
187 protected:
188 
189  std::unique_ptr<Primitives> primitives;
190 
191 };
192 
193 LM_NAMESPACE_END
194 
195 #endif // LIB_LIGHTMETRICA_SCENE_H
LM_PUBLIC_API bool PostConfigure()
Definition: scene.cpp:47
LM_PUBLIC_API const Light * SampleLightSelection(Math::Vec2 &lightSampleP, Math::PDFEval &selectionPdf) const
Definition: scene.cpp:79
Definition: component.h:45
virtual bool IntersectTriangles(Ray &ray, Intersection &isect) const =0
Definition: light.h:32
void StoreIntersectionFromBarycentricCoords(unsigned int primitiveIndex, unsigned int triangleIndex, const Ray &ray, const Math::Vec2 &b, Intersection &isect) const
Definition: scene.cpp:101
LM_PUBLIC_API bool Intersect(Ray &ray, Intersection &isect) const
Definition: scene.cpp:68
Definition: primitive.h:39
Definition: camera.h:35
virtual boost::signals2::connection Connect_ReportBuildProgress(const std::function< void(double, bool)> &func)=0
virtual bool Build()=0
LM_PUBLIC_API AABB GetAABB() const
Definition: scene.cpp:58
virtual bool Configure(const ConfigNode &node)=0
virtual AABB GetAABBTriangles() const =0
Definition: scene.h:47
Definition: assets.h:39
LM_PUBLIC_API void Load(Primitives *primitives)
Definition: scene.cpp:42
LM_PUBLIC_API const Camera * MainCamera() const
Definition: scene.cpp:74
Definition: ray.h:33
Definition: intersection.h:39
LM_PUBLIC_API Math::PDFEval LightSelectionPdf() const
Definition: scene.cpp:96
Definition: confignode.h:37
Definition: aabb.h:28
Definition: primitives.h:43