-
Notifications
You must be signed in to change notification settings - Fork 0
/
camera.cpp
54 lines (43 loc) · 1.6 KB
/
camera.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
50
51
52
53
54
#include "camera.hpp"
#include <cmath>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/trigonometric.hpp>
#include <iostream>
void Camera::calcualateView() {
m_view_mat = glm::mat4(1.0f);
m_view_mat = glm::rotate(m_view_mat, -m_transform.rot.x, glm::vec3(1.0f, 0.0f, 0.0f));
m_view_mat = glm::rotate(m_view_mat, -m_transform.rot.y, glm::vec3(0.0f, 1.0f, 0.0f));
m_view_mat = glm::translate(m_view_mat, -m_transform.pos);
}
void Camera::calculateProjection(float aspect) {
//m_projection_mat = glm::mat4(1.0f);
m_projection_mat = glm::perspective(glm::radians(45.0f), aspect, 0.1f, 200.0f);
}
void Camera::update() {
calcualateView();
}
void Camera::rotateXY(float x, float y, bool clamp_x) {
m_transform.rot.x += x;
m_transform.rot.y += y;
if(clamp_x) {
if(m_transform.rot.x > glm::radians(90.0f)) {
m_transform.rot.x = glm::radians(90.0f);
} else if(m_transform.rot.x < glm::radians(-90.0f)) {
m_transform.rot.x = glm::radians(-90.0f);
}
}
}
void Camera::moveY(float height_offset) {
m_transform.pos.y += height_offset;
}
void Camera::moveForward(float forward_offset) {
m_transform.pos.x += std::sin(m_transform.rot.y) * forward_offset;
m_transform.pos.z += std::cos(m_transform.rot.y) * forward_offset;
}
void Camera::moveRight(float right_offset) {
m_transform.pos.x += std::sin(m_transform.rot.y + glm::radians(90.0f)) * right_offset;
m_transform.pos.z += std::cos(m_transform.rot.y + glm::radians(90.0f)) * right_offset;
}
void Camera::viewportResize(float aspect) {
calculateProjection(aspect);
}