-
Notifications
You must be signed in to change notification settings - Fork 0
/
Camera.cpp
104 lines (84 loc) · 1.64 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "Camera.h"
Camera::Camera(glm::vec3 pos, glm::vec3 up, GLint yaw, GLint pitch, GLfloat moveSpeed, GLfloat turnSpeed)
{
this->pos = pos;
front = glm::vec3(0.0f, 0.0f, -1.0f);
worldUp = up;
this->yaw = yaw;
this->pitch = pitch;
this->moveSpeed = moveSpeed;
this->turnSpeed = turnSpeed;
updateCamera();
}
Camera::Camera()
{
pos = glm::vec3(0.0f, 0.0f, 0.0f);
front = glm::vec3(0.0f, 0.0f, -1.0f);
worldUp = glm::vec3(0.0f, 1.0f, 0.0f);
yaw = -90.0f;
pitch = 0.0f;
moveSpeed = 5.0f;
turnSpeed = 0.5f;
updateCamera();
}
void Camera::KeysMove(bool* keys, GLfloat deltaTime)
{
GLfloat velocity = moveSpeed * deltaTime;
if (keys[GLFW_KEY_W])
{
pos += front * velocity;
}
if (keys[GLFW_KEY_S])
{
pos -= front * velocity;
}
if (keys[GLFW_KEY_A])
{
pos += right * velocity;
}
if (keys[GLFW_KEY_D])
{
pos -= right * velocity;
}
if (keys[GLFW_KEY_SPACE])
{
pos.y += 1.0f * velocity;
}
updateCamera();
}
void Camera::MouseMove(GLfloat xChange, GLfloat yChange)
{
xChange *= turnSpeed;
yChange *= turnSpeed;
yaw += xChange;
pitch += yChange;
if (pitch > 89.0f)
{
pitch = 89.0f;
}
if (pitch < -89.0f)
{
pitch = -89.0f;
}
updateCamera();
}
void Camera::updateCamera()
{
front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
front.y = sin(glm::radians(pitch));
front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
front = glm::normalize(front);
right = glm::cross(worldUp, front);
cameraUp = glm::cross(front, right);
}
glm::mat4 Camera::createLookAtMatrix()
{
return glm::lookAt(pos, pos + front, worldUp);
}
glm::vec3 Camera::GetCameraPosition()
{
return pos;
}
Camera::~Camera()
{
}