The spica renderer
ray.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef SPICA_RAY_H_
6 #define SPICA_RAY_H_
7 
8 #include <memory>
9 
10 #include "core/common.h"
11 #include "core/vector2d.h"
12 #include "core/vector3d.h"
13 #include "core/point3d.h"
14 #include "core/normal3d.h"
15 #include "core/spectrum.h"
16 
17 #include "core/render.hpp"
18 
19 namespace spica {
20 
24 class SPICA_EXPORTS Ray {
25 public:
26  // Public methods
27  Ray();
28  Ray(const Point3d& origin, const Vector3d& direction, double maxDist = INFTY,
29  const Medium* medium = nullptr);
30  Ray(const Ray& ray);
31  virtual ~Ray();
32 
33  Ray& operator=(const Ray& ray);
34 
36  Point3d proceeded(double t) const;
37 
38  inline Point3d org() const { return org_; }
39  inline Vector3d dir() const { return dir_; }
40  inline Vector3d invdir() const { return invdir_; }
41  inline double maxDist() const { return maxDist_; }
42  inline const Medium* medium() const { return medium_; }
43  inline void setMaxDist(double maxDist) { maxDist_ = maxDist; }
44 
45 private:
46  // Private methods
47  void calcInvdir();
48 
49  // Private fields
50  Point3d org_ = { 0.0, 0.0, 0.0 };
51  Vector3d dir_ = { 0.0, 0.0, 0.0 };
52  Vector3d invdir_ = { INFTY, INFTY, INFTY };
53  double maxDist_ = INFTY;
54  const Medium* medium_ = nullptr;
55 };
56 
57 } // namespace spica
58 
59 #endif // SPICA_RAY_H_
Ray class.
Definition: ray.h:24
Definition: medium.h:19