diff options
Diffstat (limited to 'src/core/camera.c')
-rw-r--r-- | src/core/camera.c | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/src/core/camera.c b/src/core/camera.c deleted file mode 100644 index 77ddad6..0000000 --- a/src/core/camera.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "camera.h" - -#include "input.h" -#include "keys.h" -#include "maths.h" - -#define CAMERA_SPEED 0.2 -#define CAMERA_SENSITIVITY 0.5 - -Camera Camera_Create(Vec3 pos, Vec3 front, Vec3 up, f32 fov) { - Camera c = { .position = pos, .front = front, .up = up, .fov = fov }; - return c; -} - -Mat4 Camera_ViewProj(Camera* c, f32 lens_height, f32 lens_width, Mat4* out_view, Mat4* out_proj) { - Mat4 proj = mat4_perspective(c->fov, lens_width / lens_height, 0.1, 1000.0); - Vec3 camera_direction = vec3_add(c->position, c->front); - Mat4 view = mat4_look_at(c->position, camera_direction, c->up); - if (out_view) { - *out_view = view; - } - if (out_proj) { - *out_proj = proj; - } - return mat4_mult(view, proj); -} - -void FlyCamera_Update(Camera* camera) { - static f32 yaw = 0.0; - static f32 pitch = 0.0; - - // Keyboard - f32 speed = CAMERA_SPEED; - Vec3 horizontal = vec3_cross(camera->front, camera->up); - if (key_is_pressed(KEYCODE_A) || key_is_pressed(KEYCODE_KEY_LEFT)) { - Vec3 displacement = vec3_mult(horizontal, -speed); - camera->position = vec3_add(camera->position, displacement); - } - if (key_is_pressed(KEYCODE_D) || key_is_pressed(KEYCODE_KEY_RIGHT)) { - Vec3 displacement = vec3_mult(horizontal, speed); - camera->position = vec3_add(camera->position, displacement); - } - if (key_is_pressed(KEYCODE_W) || key_is_pressed(KEYCODE_KEY_UP)) { - Vec3 displacement = vec3_mult(camera->front, speed); - camera->position = vec3_add(camera->position, displacement); - } - if (key_is_pressed(KEYCODE_S) || key_is_pressed(KEYCODE_KEY_DOWN)) { - Vec3 displacement = vec3_mult(camera->front, -speed); - camera->position = vec3_add(camera->position, displacement); - } - if (key_is_pressed(KEYCODE_Q)) { - Vec3 displacement = vec3_mult(camera->up, speed); - camera->position = vec3_add(camera->position, displacement); - } - if (key_is_pressed(KEYCODE_E)) { - Vec3 displacement = vec3_mult(camera->up, -speed); - camera->position = vec3_add(camera->position, displacement); - } - - // Mouse - if (MouseBtn_Held(MOUSEBTN_LEFT)) { - mouse_state mouse = Input_GetMouseState(); - // printf("Delta x: %d Delta y %d\n",mouse.x_delta, mouse.y_delta ); - - f32 x_offset = mouse.x_delta; - f32 y_offset = -mouse.y_delta; - - f32 sensitivity = CAMERA_SENSITIVITY; // change this value to your liking - x_offset *= sensitivity; - y_offset *= sensitivity; - - yaw += x_offset; - pitch += y_offset; - - // make sure that when pitch is out of bounds, screen doesn't get flipped - if (pitch > 89.0f) pitch = 89.0f; - if (pitch < -89.0f) pitch = -89.0f; - - Vec3 front; - front.x = cos(deg_to_rad(yaw) * cos(deg_to_rad(pitch))); - front.y = sin(deg_to_rad(pitch)); - front.z = sin(deg_to_rad(yaw)) * cos(deg_to_rad(pitch)); - front = vec3_normalise(front); - camera->front.x = front.x; - camera->front.y = front.y; - camera->front.z = front.z; - } - - // TODO: Right mouse => pan in screen space -} |