summaryrefslogtreecommitdiff
path: root/src/engine/M_camera.c
blob: a2852bab4626ed521906ec396a2ec305770fb362 (plain)
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;
	}
}