GameKit  0.0.1a
C++ gamedev tools
Transformable.cpp
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: Transformable.cpp
5  *
6  * Description:
7  *
8  * Created: 11/11/2018 18:06:09
9  *
10  * Author: Quentin Bazin, <quent42340@gmail.com>
11  *
12  * =====================================================================================
13  */
14 #include <cmath>
15 
16 #include "gk/gl/Transformable.hpp"
17 
18 namespace gk {
19 
20 void Transformable::setPosition(float x, float y, float z) {
21  m_position.x = x;
22  m_position.y = y;
23  m_position.z = z;
24  m_transformNeedUpdate = true;
25  // m_inverseTransformNeedUpdate = true;
26 }
27 
28 void Transformable::setOrigin(float x, float y, float z) {
29  m_origin.x = x;
30  m_origin.y = y;
31  m_origin.z = z;
32  m_transformNeedUpdate = true;
33  // m_inverseTransformNeedUpdate = true;
34 }
35 
36 void Transformable::setScale(float factorX, float factorY, float factorZ) {
37  m_scale.x = factorX;
38  m_scale.y = factorY;
39  m_scale.z = factorZ;
40  m_transformNeedUpdate = true;
41  // m_inverseTransformNeedUpdate = true;
42 }
43 
44 void Transformable::setRotation(float angle, const Vector3f &axis) {
45  m_rotation = std::fmod(angle, 360);
46  if (m_rotation < 0)
47  m_rotation += 360.f;
48 
51 
52  m_transformNeedUpdate = true;
53  // m_inverseTransformNeedUpdate = true;
54 }
55 
56 void Transformable::move(float offsetX, float offsetY, float offsetZ) {
57  setPosition(m_position.x + offsetX, m_position.y + offsetY, m_position.z + offsetZ);
58 }
59 
60 void Transformable::move(const Vector3f &offset) {
61  setPosition(m_position.x + offset.x, m_position.y + offset.y, m_position.z + offset.z);
62 }
63 
64 void Transformable::scale(float factorX, float factorY, float factorZ) {
65  setScale(m_scale.x * factorX, m_scale.y * factorY, m_scale.z * factorZ);
66 }
67 
68 void Transformable::scale(const Vector3f &factor) {
69  setScale(m_scale.x * factor.x, m_scale.y * factor.y, m_scale.z * factor.z);
70 }
71 
72 void Transformable::rotate(float angle) {
73  setRotation(m_rotation + angle);
74 }
75 
76 void Transformable::rotate(float angle, const Vector3f &axis) {
77  Transform newRotation;
78  newRotation.rotate(angle, axis);
79 
81 
82  m_transformNeedUpdate = true;
83 }
84 
87  Transform originTransform;
88  originTransform.translate(-m_origin);
89 
90  Transform scaleTransform;
91  scaleTransform.scale(m_scale);
92 
93  Transform positionTransform;
94  positionTransform.translate(m_position);
95 
96  m_transform = positionTransform * scaleTransform * m_rotationTransform * originTransform;
97  m_transformNeedUpdate = false;
98  }
99 
100  return m_transform;
101 }
102 
103 // const Transform& Transformable::getInverseTransform() const {
104 // if (m_inverseTransformNeedUpdate) {
105 // m_inverseTransform = getTransform().getInverse();
106 // m_inverseTransformNeedUpdate = false;
107 // }
108 //
109 // return m_inverseTransform;
110 // }
111 
112 } // namespace gk
113 
Transform & translate(float x, float y, float z=0)
Definition: Transform.cpp:28
Transform m_rotationTransform
void move(float offsetX, float offsetY, float offsetZ=0)
void setRotation(float angle)
static const Transform Identity
Definition: Transform.hpp:50
void setScale(float factorX, float factorY, float factorZ=1)
void setPosition(float x, float y, float z=0)
Transform & rotate(float angle)
Definition: Transform.hpp:38
Transform & scale(float scaleX, float scaleY, float scaleZ=1)
Definition: Transform.cpp:39
const Transform & getTransform() const
void rotate(float angle)
void scale(float factorX, float factorY, float factorZ=1)
void setOrigin(float x, float y, float z=0)