diff options
| author | DrNuget <drnuget@outlook.com> | 2026-01-10 06:41:13 +0200 |
|---|---|---|
| committer | DrNuget <drnuget@outlook.com> | 2026-01-10 06:41:13 +0200 |
| commit | 3a3b64bedc47a0795358c6be7062160f52f2fc3b (patch) | |
| tree | eeaebee9ad6bab1a91e46ed8e7f682ac404e16e2 /src/engine/M_camera.c | |
| parent | 7f3aa1cff755d21d972457b05c140cf465b9fa19 (diff) | |
| download | mnm-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.c | 62 |
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; + } } |
