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 "M_camera.h"
void M_initCamera(M_Camera *camera, vec3 up)
{
glm_vec3_zero(camera->pos);
switch (camera->type) {
case M_CAMERA_FPS:
camera->yaw = 0.0f;
camera->pitch = 0.0f;
camera->roll = 0.0f;
break;
case M_CAMERA_REGULAR:
default:
glm_vec3_copy(
up,
camera->up
);
glm_vec3_copy(
(vec3){0.0f, 0.0f, -1.0f},
camera->direction
);
break;
}
}
inline void M_cameraViewMatrix(M_Camera *camera)
{
switch (camera->type) {
case M_CAMERA_REGULAR:
vec3 target;
glm_vec3_add(
camera->pos,
camera->direction,
target
);
glm_lookat(
camera->pos,
target,
camera->up,
camera->view_matrix
);
break;
case M_CAMERA_FPS:
glm_mat4_identity(camera->view_matrix);
float pitch, yaw, roll;
pitch = glm_rad(camera->pitch);
yaw = glm_rad(camera->yaw);
roll = glm_rad(camera->roll);
glm_translate(camera->view_matrix, camera->pos);
glm_rotate_x(camera->view_matrix, pitch, camera->view_matrix);
glm_rotate_y(camera->view_matrix, yaw, camera->view_matrix);
break;
}
}
|