TDME2  1.9.200
Transform.cpp
Go to the documentation of this file.
2 
3 #include <string>
4 
5 #include <tdme/tdme.h>
7 #include <tdme/engine/Rotation.h>
9 #include <tdme/math/Matrix4x4.h>
10 #include <tdme/math/Quaternion.h>
11 #include <tdme/math/Vector3.h>
12 
13 using std::to_string;
14 
21 
22 void Transform::fromMatrix(const Matrix4x4& matrix, RotationOrder* rotationOrder) {
23  matrix.getScale(scale);
25  auto eulerAngles = matrix.computeEulerAngles();
26  rotations.clear();
27  rotations.emplace_back(rotationOrder->getAxis0(), eulerAngles[rotationOrder->getAxis0VectorIndex()]);
28  rotations.emplace_back(rotationOrder->getAxis1(), eulerAngles[rotationOrder->getAxis1VectorIndex()]);
29  rotations.emplace_back(rotationOrder->getAxis2(), eulerAngles[rotationOrder->getAxis2VectorIndex()]);
30  update();
31 }
32 
34 {
35  // matrices
36  Matrix4x4 translationMatrix;
37  Matrix4x4 scaleMatrix;
38 
39  // transform matrix identity
41  // set up translation matrix
42  translationMatrix.identity().setTranslation(translation);
43  // set up scale matrix
44  scaleMatrix.identity().scale(scale);
45  // create and multiply rotations
47  for (auto& rotation: rotations) {
48  rotation.update();
49  rotationsQuaternion.multiply(rotation.getQuaternion());
50  }
52  // apply to transform matrix
53  transformMatrix.multiply(scaleMatrix);
55  transformMatrix.multiply(translationMatrix);
56 }
57 
59  //
60  fromMatrix(transformMatrix.clone().invert(), RotationOrder::ZYX);
61  //
62  return *this;
63 }
Rotation representation.
Definition: Rotation.h:18
Transform which contain scale, rotations and translation.
Definition: Transform.h:29
virtual void fromMatrix(const Matrix4x4 &matrix, RotationOrder *rotationOrder)
Set up this transform from given matrix and rotation order.
Definition: Transform.cpp:22
Quaternion rotationsQuaternion
Definition: Transform.h:33
virtual Transform & invert()
Invert this transform.
Definition: Transform.cpp:58
vector< Rotation > rotations
Definition: Transform.h:34
Matrix4x4 transformMatrix
Definition: Transform.h:35
virtual void update()
Computes transform matrix.
Definition: Transform.cpp:33
Represents rotation orders of a model.
Definition: RotationOrder.h:23
const Vector3 & getAxis1() const
Definition: RotationOrder.h:67
const Vector3 & getAxis0() const
Definition: RotationOrder.h:60
const Vector3 & getAxis2() const
Definition: RotationOrder.h:74
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Matrix4x4 clone() const
Clones this matrix.
Definition: Matrix4x4.h:619
Matrix4x4 & identity()
Creates identity matrix.
Definition: Matrix4x4.h:158
Matrix4x4 & scale(float scalar)
Scales by scalar.
Definition: Matrix4x4.h:183
Vector3 multiply(const Vector3 &vector3) const
Multiplies this matrix with vector3.
Definition: Matrix4x4.h:225
Vector3 computeEulerAngles() const
Compute Euler angles (rotation around x, y, z axes)
Definition: Matrix4x4.h:531
Matrix4x4 & invert()
Inverts this matrix.
Definition: Matrix4x4.h:479
void getScale(Vector3 &scale) const
Get scale.
Definition: Matrix4x4.h:388
void getTranslation(Vector3 &translation) const
Get translation.
Definition: Matrix4x4.h:433
Matrix4x4 & setTranslation(const Vector3 &translation)
Set translation.
Definition: Matrix4x4.h:442
Quaternion class representing quaternion mathematical structure and operations with x,...
Definition: Quaternion.h:24
Quaternion & identity()
Creates identity quaternion.
Definition: Quaternion.h:226
Matrix4x4 computeMatrix() const
Computes a rotation matrix4x4 from this quaternion.
Definition: Quaternion.h:379
Quaternion & multiply(const Quaternion quaternion)
Multiplies this quaternion with given quaternion.
Definition: Quaternion.h:278
Quaternion & normalize()
Normalizes this quaternion.
Definition: Quaternion.h:346
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20