The spica renderer
camera.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_CAMERA_INTERFACE_H_
6 #define _SPICA_CAMERA_INTERFACE_H_
7 
8 #include "core/common.h"
9 #include "core/transform.h"
10 #include "core/cobject.h"
11 
12 #include "core/render.hpp"
13 
14 namespace spica {
15 
16 class SPICA_EXPORTS Camera : public CObject {
17 public:
18  // Public methods
19  Camera();
20  Camera(const Transform& cameraToWorld,
21  const Transform& cameraToScreen,
22  const Bounds2d& screen,
23  double lensRadius, double focalLength,
24  std::shared_ptr<Film> film);
25  Camera(const Camera&) = default;
26 
27  virtual ~Camera();
28 
29  Camera& operator=(const Camera&) = default;
30 
31  virtual Ray spawnRay(const Point2i& pixel, const Point2d& randFilm,
32  const Point2d& randLens, double* pdfPos = nullptr,
33  double* pdfDir = nullptr) const = 0;
34 
35  virtual Spectrum We(const Ray& ray, Point2d* pRaster = nullptr) const = 0;
36  virtual void pdfWe(const Ray& ray, double* pdfPos, double* pdfDir) const = 0;
37  virtual Spectrum sampleWi(const Interaction& ref, const Point2d& rand,
38  Vector3d* wi, double* pdf, Point2d* pRaster,
39  VisibilityTester* vis) const = 0;
40 
41  inline std::shared_ptr<Film> film() const { return film_; }
42  inline const Transform& cameraToWorld() const { return cameraToWorld_; }
43  inline const Transform& cameraToScreen() const { return cameraToScreen_; }
44 
45 protected:
46  // Private fields
47  Transform cameraToWorld_;
48  Transform cameraToScreen_, rasterToCamera_;
49  Transform screenToRaster_, rasterToScreen_;
50  double lensRadius_, focalLength_;
51  std::shared_ptr<Film> film_;
52 };
53 
54 } // namespace spica
55 
56 #endif // _SPICA_CAMERA_INTERFACE_H_
RGB spectrum.
Definition: spectrum.h:18
Ray class.
Definition: ray.h:24
Definition: cobject.h:24
The transformation operator class.
Definition: transform.h:17
Definition: bounds2d.h:16
Definition: visibility_tester.h:15
Definition: camera.h:16
Definition: interaction.h:23