Mathter
A configurable 3D math library for game developers.
TranslationBuilder.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include "../Matrix/MatrixImpl.hpp"
5 #include "../Vector.hpp"
6 #include "IdentityBuilder.hpp"
7 
8 
9 namespace mathter {
10 
11 
12 template <class T, int Dim, bool Packed>
14 public:
15  TranslationBuilder(const Vector<T, Dim, Packed>& translation) : translation(translation) {}
17 
18  template <class U, eMatrixOrder Order, eMatrixLayout Layout, bool MPacked>
21  Set(m);
22  return m;
23  }
24 
25  template <class U, eMatrixLayout Layout, bool MPacked>
28  Set(m);
29  return m;
30  }
31 
32  template <class U, eMatrixLayout Layout, bool MPacked>
35  Set(m);
36  return m;
37  }
38 
39 private:
40  template <class U, int Rows, int Columns, eMatrixOrder Order, eMatrixLayout Layout, bool MPacked>
42  m = Identity();
43  if constexpr (Order == eMatrixOrder::FOLLOW_VECTOR) {
44  for (int i = 0; i < translation.Dimension(); ++i) {
45  m(Rows - 1, i) = translation(i);
46  }
47  }
48  else {
49  for (int i = 0; i < translation.Dimension(); ++i) {
50  m(i, Columns - 1) = translation(i);
51  }
52  }
53  }
54 
55  const Vector<T, Dim, Packed> translation;
56 };
57 
58 
61 template <class T, int Dim, bool Packed>
62 auto Translation(const Vector<T, Dim, Packed>& translation) {
63  return TranslationBuilder{ translation };
64 }
65 
68 template <class... Args, typename std::enable_if<(traits::All<traits::IsScalar, typename std::decay<Args>::type...>::value), int>::type = 0>
69 auto Translation(const Args&... coordinates) {
70  using PromotedT = decltype((0 + ... + coordinates));
71  return TranslationBuilder{ Vector<PromotedT, sizeof...(coordinates)>(coordinates...) };
72 }
73 
74 
75 } // namespace mathter
auto Identity()
Creates an identity matrix or identity quaternion.
Definition: IdentityBuilder.hpp:42
TranslationBuilder(const Vector< T, Dim, Packed > &translation)
Definition: TranslationBuilder.hpp:15
Definition: TranslationBuilder.hpp:13
Represents a vector in N-dimensional space.
Definition: Definitions.hpp:57
Definition: Approx.hpp:11
TranslationBuilder & operator=(const TranslationBuilder &)=delete
auto Translation(const Vector< T, Dim, Packed > &translation)
Creates a translation matrix.
Definition: TranslationBuilder.hpp:62
Definition: Definitions.hpp:63