The spica renderer
triangle.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_TRIANGLE_H_
6 #define _SPICA_TRIANGLE_H_
7 
8 #include <array>
9 
10 #include "core/core.hpp"
11 #include "core/common.h"
12 #include "core/point2d.h"
13 #include "core/point3d.h"
14 #include "core/normal3d.h"
15 #include "core/transform.h"
16 #include "core/shape.h"
17 
18 namespace spica {
19 
20 class SPICA_EXPORTS Triangle : public Shape {
21 public:
22  // Public methods
23  Triangle();
24  Triangle(const Point3d& p0, const Point3d& p1, const Point3d& p2,
25  const Transform& objectToWorld = Transform());
26  Triangle(const Point3d& p0, const Point3d& p1, const Point3d& p2,
27  const Normal3d& n0, const Normal3d& n1, const Normal3d& n2,
28  const Transform& objectToWorld = Transform());
29  Triangle(const Point3d& p0, const Point3d& p1, const Point3d& p2,
30  const Normal3d& n0, const Normal3d& n1, const Normal3d& n2,
31  const Point2d& uv0, const Point2d& uv1, const Point2d& uv2,
32  const Transform& objectToWorld = Transform());
33  Triangle(const Triangle& t);
34 
35  ~Triangle();
36 
37  Triangle& operator=(const Triangle& t);
38  const Point3d& operator[](int i) const;
39 
40  bool intersect(const Ray& ray, double* tHit,
41  SurfaceInteraction* isect) const override;
42  bool intersect(const Ray& ray) const override;
43 
44  Interaction sample(const Point2d& rands) const override;
45 
46  Bounds3d worldBound() const override;
47  Bounds3d objectBound() const override;
48 
49  double area() const override;
50  std::vector<Triangle> triangulate() const override;
51 
52  Point3d gravity() const;
53  const Normal3d& normal(int i) const;
54  const Point2d& uv(int i) const;
55 
56 private:
57  // Private fields
58  std::array<Point3d, 3> points_;
59  std::array<Normal3d, 3> normals_;
60  std::array<Point2d, 3> uvs_;
61  Normal3d faceNormal_;
62 
63 }; // class Triangle
64 
65 } // namespace spica
66 
67 #endif // _SPICA_TRIANGLE_H_
Definition: interaction.h:68
Ray class.
Definition: ray.h:24
The transformation operator class.
Definition: transform.h:17
Definition: core.hpp:62
Definition: triangle.h:20
Definition: core.hpp:68
Definition: interaction.h:23
Abstract shape class.
Definition: shape.h:39