Mathter
A configurable 3D math library for game developers.
ShearBuilder.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include "../Matrix/MatrixImpl.hpp"
5 #include "../Vector.hpp"
6 
7 
8 namespace mathter {
9 
10 
11 template <class T>
12 class ShearBuilder {
13 public:
14  ShearBuilder(T slope, int principalAxis, int modulatorAxis) : slope(slope), principalAxis(principalAxis), modulatorAxis(modulatorAxis) {}
15  ShearBuilder& operator=(const ShearBuilder&) = delete;
16 
17  template <class U, int Rows, int Columns, eMatrixOrder Order, eMatrixLayout Layout, bool MPacked>
20  Set(m);
21  return m;
22  }
23 
24 private:
25  template <class U, int Rows, int Columns, eMatrixOrder Order, eMatrixLayout Layout, bool MPacked>
27  assert(principalAxis != modulatorAxis);
28  m = Identity();
29  if constexpr (Order == eMatrixOrder::FOLLOW_VECTOR) {
30  assert(modulatorAxis < Rows);
31  assert(principalAxis < Columns);
32  m(modulatorAxis, principalAxis) = slope;
33  }
34  else {
35  assert(principalAxis < Rows);
36  assert(modulatorAxis < Columns);
37  m(principalAxis, modulatorAxis) = slope;
38  }
39  }
40 
41  const T slope;
42  const int principalAxis;
43  const int modulatorAxis;
44 };
45 
46 
53 template <class T>
54 auto Shear(T slope, int principalAxis, int modulatorAxis) {
55  return ShearBuilder(slope, principalAxis, modulatorAxis);
56 }
57 
58 
59 } // namespace mathter
auto Identity()
Creates an identity matrix or identity quaternion.
Definition: IdentityBuilder.hpp:42
ShearBuilder(T slope, int principalAxis, int modulatorAxis)
Definition: ShearBuilder.hpp:14
auto Shear(T slope, int principalAxis, int modulatorAxis)
Creates a shear matrix.
Definition: ShearBuilder.hpp:54
Definition: ShearBuilder.hpp:12
ShearBuilder & operator=(const ShearBuilder &)=delete
Definition: Approx.hpp:11
Definition: Definitions.hpp:63