The spica renderer
disk.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_DISK_H_
6 #define _SPICA_DISK_H_
7 
8 #include <vector>
9 
10 #include "core/point3d.h"
11 #include "core/normal3d.h"
12 
13 #include "core/shape.h"
14 
15 namespace spica {
16 
20 class SPICA_EXPORTS Disk : public Shape {
21 public:
22  Disk();
23  Disk(const Point3d& center, const Normal3d& normal, double radius,
24  const Transform& objectToWorld = Transform());
25  Disk(const Disk& disk);
26  ~Disk();
27 
28  Disk& operator=(const Disk& disk);
29 
30  bool intersect(const Ray& ray, double* tHit,
31  SurfaceInteraction* isect) const override;
32  bool intersect(const Ray& ray) const override;
33 
34  Interaction sample(const Point2d& rands) const override;
35 
36  Bounds3d objectBound() const override;
37 
38  double area() const override;
39 
40  std::vector<Triangle> triangulate() const override;
41 
42  inline Point3d center() const { return center_; }
43  inline Normal3d normal() const { return normal_; }
44  inline double radius() const { return radius_; }
45 
46 private:
47  Point3d center_ = { 0.0, 0.0, 0.0 };
48  Normal3d normal_ = { 0.0, 0.0, 0.0 };
49  double radius_ = 0.0;
50 
51 }; // class Disk
52 
53 } // namespace spica
54 
55 #endif // _SPICA_DISK_H_
Definition: interaction.h:68
Ray class.
Definition: ray.h:24
The transformation operator class.
Definition: transform.h:17
Definition: interaction.h:23
Abstract shape class.
Definition: shape.h:39
Disk class.
Definition: disk.h:20