GameKit
0.0.1a
C++ gamedev tools
source
gl
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
49
m_rotationTransform
=
Transform::Identity
;
50
m_rotationTransform
.
rotate
(
m_rotation
, axis);
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
80
m_rotationTransform
= newRotation *
m_rotationTransform
;
81
82
m_transformNeedUpdate
=
true
;
83
}
84
85
const
Transform
&
Transformable::getTransform
()
const
{
86
if
(
m_transformNeedUpdate
) {
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
gk::Transform::translate
Transform & translate(float x, float y, float z=0)
Definition:
Transform.cpp:28
gk::Vector3::y
T y
Definition:
Vector3.hpp:66
gk::Transformable::m_rotationTransform
Transform m_rotationTransform
Definition:
Transformable.hpp:62
gk::Transformable::m_position
Vector3f m_position
Definition:
Transformable.hpp:55
gk
Definition:
AudioPlayer.hpp:21
gk::Transformable::move
void move(float offsetX, float offsetY, float offsetZ=0)
Definition:
Transformable.cpp:56
Transformable.hpp
gk::Transformable::m_transformNeedUpdate
bool m_transformNeedUpdate
Definition:
Transformable.hpp:64
gk::Transformable::setRotation
void setRotation(float angle)
Definition:
Transformable.hpp:34
gk::Transform::Identity
static const Transform Identity
Definition:
Transform.hpp:50
gk::Transformable::setScale
void setScale(float factorX, float factorY, float factorZ=1)
Definition:
Transformable.cpp:36
gk::Transformable::setPosition
void setPosition(float x, float y, float z=0)
Definition:
Transformable.cpp:20
gk::Transform::rotate
Transform & rotate(float angle)
Definition:
Transform.hpp:38
gk::Transform::scale
Transform & scale(float scaleX, float scaleY, float scaleZ=1)
Definition:
Transform.cpp:39
gk::Transformable::getTransform
const Transform & getTransform() const
Definition:
Transformable.cpp:85
gk::Transformable::rotate
void rotate(float angle)
Definition:
Transformable.cpp:72
gk::Transform
Definition:
Transform.hpp:28
gk::Transformable::scale
void scale(float factorX, float factorY, float factorZ=1)
Definition:
Transformable.cpp:64
gk::Transformable::m_transform
Transform m_transform
Definition:
Transformable.hpp:60
gk::Vector3< float >
gk::Transformable::m_origin
Vector3f m_origin
Definition:
Transformable.hpp:56
gk::Transformable::m_rotation
float m_rotation
Definition:
Transformable.hpp:58
gk::Transformable::setOrigin
void setOrigin(float x, float y, float z=0)
Definition:
Transformable.cpp:28
gk::Vector3::x
T x
Definition:
Vector3.hpp:65
gk::Transformable::m_scale
Vector3f m_scale
Definition:
Transformable.hpp:57
gk::Vector3::z
T z
Definition:
Vector3.hpp:67
Generated by
1.8.12