summaryrefslogtreecommitdiff
path: root/src/engine/M_camera.c
diff options
context:
space:
mode:
authorDrNuget <drnuget@outlook.com>2026-01-10 06:41:13 +0200
committerDrNuget <drnuget@outlook.com>2026-01-10 06:41:13 +0200
commit3a3b64bedc47a0795358c6be7062160f52f2fc3b (patch)
treeeeaebee9ad6bab1a91e46ed8e7f682ac404e16e2 /src/engine/M_camera.c
parent7f3aa1cff755d21d972457b05c140cf465b9fa19 (diff)
downloadmnm-3a3b64bedc47a0795358c6be7062160f52f2fc3b.tar.gz
added FPS camera movement and probably some other changes
Diffstat (limited to 'src/engine/M_camera.c')
-rw-r--r--src/engine/M_camera.c62
1 files changed, 41 insertions, 21 deletions
diff --git a/src/engine/M_camera.c b/src/engine/M_camera.c
index 58414a7..f28d22f 100644
--- a/src/engine/M_camera.c
+++ b/src/engine/M_camera.c
@@ -3,28 +3,48 @@
void M_initCamera(M_Camera *camera, vec3 up)
{
glm_vec3_zero(camera->pos);
- glm_vec3_copy(
- up,
- camera->up
- );
- glm_vec3_copy(
- (vec3){0.0f, 0.0f, -1.0f},
- camera->direction
- );
+ 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)
+inline void M_cameraViewMatrix(M_Camera *camera)
{
- vec3 target;
- glm_vec3_add(
- camera->pos,
- camera->direction,
- target
- );
- glm_lookat(
- camera->pos,
- target,
- camera->up,
- camera->view_matrix
- );
+ 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);
+ glm_translate(camera->view_matrix, camera->pos);
+ glm_rotate_x(camera->view_matrix, camera->pitch, camera->view_matrix);
+ glm_rotate_y(camera->view_matrix, camera->yaw, camera->view_matrix);
+ break;
+ }
}