The spica renderer
film.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_FILM_H_
6 #define _SPICA_FILM_H_
7 
8 #include <string>
9 #include <vector>
10 #include <memory>
11 #include <functional>
12 
13 #include "core/core.hpp"
14 #include "core/common.h"
15 #include "core/uncopyable.h"
16 #include "core/point2d.h"
17 #include "core/image.h"
18 #include "core/filter.h"
19 #include "core/cobject.h"
20 
21 namespace spica {
22 
23 class SPICA_EXPORTS Film : public CObject, Uncopyable {
24 public:
25  // Public methods
26  Film(const Point2i& resolution,
27  const std::shared_ptr<Filter> &filter,
28  const std::string& filename,
29  const std::shared_ptr<std::function<void(const Image&)>> &callback = nullptr);
30 
31  ~Film() = default;
32 
33  inline Point2i resolution() const { return resolution_; }
34  inline double aspect() const {
35  return static_cast<double>(resolution_.x()) / resolution_.y();
36  }
37 
45  void save(int id = 0) const;
46 
55  void saveMLT(double scale, int id = 0) const;
56 
57  void setImage(const Image& image);
58  void addPixel(const Point2i& pixel, const Point2d& pInPixel,
59  const Spectrum& color);
60  void addPixel(const Point2d& pixel, const Spectrum& color);
61 
62  inline void setFilename(const std::string filename) {
63  this->filename_ = filename;
64  }
65 
66  inline void setSaveCallback(std::unique_ptr<std::function<void(const Image&)>>&& callback) {
67  this->saveCallback_ = std::move(callback);
68  }
69 
70  inline double weight(const Point2d &pixel) const {
71  return filter_->evaluate(pixel);
72  }
73 
74  virtual void saveImage(const std::string &filename, const Image &image) const = 0;
75 
76 private:
77  // Private fields
78  Point2i resolution_;
79  std::shared_ptr<Filter> filter_;
80  std::string filename_;
81  Image image_;
82  std::vector<std::vector<double>> weights_;
83  std::vector<std::vector<int>> samples_;
84  std::shared_ptr<std::function<void(const Image&)>> saveCallback_;
85 
86 }; // class Film
87 
88 } // namespace spica
89 
90 #endif // _SPICA_FILM_H_
RGB spectrum.
Definition: spectrum.h:18
Definition: cobject.h:24
Definition: film.h:23
Image class.
Definition: image.h:18
Interface class which forbids copy and assignment.
Definition: uncopyable.h:15