-
Notifications
You must be signed in to change notification settings - Fork 0
/
Transform.cpp
49 lines (37 loc) · 1.26 KB
/
Transform.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "Transform.hpp"
#include <glm/ext/matrix_transform.hpp>
Transform::Transform() {
objPosition = glm::vec3(0.0f, 0.0f, 0.0f);
objScale = glm::vec3(1.0f, 1.0f, 1.0f);
objEulerAngles = glm::vec3(0.0f, 0.0f, 0.0f);
}
glm::vec3 Transform::getPosition() {
return objPosition;
}
glm::vec3 Transform::getScale() {
return objScale;
}
glm::vec3 Transform::getEulerAngles() {
return objEulerAngles;
}
glm::mat4 Transform::getMatrix() {
return objTransform;
}
void Transform::setPosition(const glm::vec3& position) {
objPosition = position;
}
void Transform::setScale(const glm::vec3& scale) {
objScale = scale;
}
void Transform::setEulerAngles(const glm::vec3& eulerAngles) {
objEulerAngles = eulerAngles;
}
void Transform::update() {
glm::mat4 mtxTranslate = glm::translate(glm::mat4(1), objPosition);
glm::mat4 mtxScale = glm::scale(glm::mat4(1), objScale);
glm::mat4 mtxRotX, mtxRotY, mtxRotZ;
mtxRotX = glm::rotate(glm::mat4(1), glm::radians(objEulerAngles.x), glm::vec3(1.0f, 0.0f, 0.0f));
mtxRotY = glm::rotate(glm::mat4(1), glm::radians(objEulerAngles.y), glm::vec3(0.0f, 1.0f, 0.0f));
mtxRotZ = glm::rotate(glm::mat4(1), glm::radians(objEulerAngles.z), glm::vec3(0.0f, 0.0f, 1.0f));
objTransform = mtxTranslate * (mtxRotZ * mtxRotY * mtxRotX) * mtxScale;
}