The spica renderer
transform.h
1 #ifdef _MSC_VER
2 #pragma once
3 #endif
4 
5 #ifndef _SPICA_TRANSFORM_H_
6 #define _SPICA_TRANSFORM_H_
7 
8 #include "../core/common.h"
9 #include "../core/bounds3d.h"
10 #include "matrix4x4.h"
11 
12 namespace spica {
13 
17 class SPICA_EXPORTS Transform {
18 public:
19  // Public methods
20  Transform();
21  explicit Transform(const double mat[4][4]);
22  explicit Transform(const Matrix4x4& m);
23  Transform(const Matrix4x4& m, const Matrix4x4& mInv);
24  Transform(const Transform& t);
25 
26  Transform& operator=(const Transform& t);
27 
28  bool operator==(const Transform& t);
29  bool operator!=(const Transform& t);
30  Transform& operator*=(const Transform& t);
31 
32  Point3d apply(const Point3d& p) const;
33  Vector3d apply(const Vector3d& v) const;
34  Normal3d apply(const Normal3d& n) const;
35  Bounds3d apply(const Bounds3d& b) const;
36 
37  bool isIdentity() const;
38 
39  Transform inverted() const;
40  static Transform mitsubaToPbrt(const Transform &t);
41 
42  inline const Matrix4x4& getMat() const { return m_; }
43  inline const Matrix4x4& getInvMat() const { return mInv_; }
44 
45  // Public static methods
46  static Transform translate(const Vector3d& delta);
47  static Transform scale(double x, double y, double z);
48  static Transform rotate(double theta, const Vector3d& axis);
49  static Transform lookAt(const Point3d& eye, const Point3d& look,
50  const Vector3d& up);
51  static Transform orthographic(double zNear, double zFar);
52  static Transform perspective(double fov, double aspect,
53  double near, double far);
54 
55 private:
56  // Private fields
57  Matrix4x4 m_, mInv_;
58 };
59 
60 } // namespace spica
61 
62 SPICA_EXPORTS spica::Transform operator*(const spica::Transform& t1,
63  const spica::Transform& t2);
64 
65 #endif // _SPICA_TRANSFORM_H_
Matrix of 4 x 4 size.
Definition: matrix4x4.h:20
The transformation operator class.
Definition: transform.h:17