// // Created by Tristan on 10/16/2025. // #ifndef CAMERA_H #define CAMERA_H #include #include #include "../shaders/shader.h" typedef struct { vec3 Position; vec3 Orientation; vec3 Up; float speed; float sensitivity; float FOV_deg; int width; int height; mat4 View; // cache for the calculated View Matrix } Camera; // initializer void camera_init(Camera *self, vec3 initial_position, int width, int height); /* --- Matrix calculation functions --- */ // Updates self->View matrix based on pos, orientation and up void camera_update_view_matrix(Camera *self); // calculates the projection matrix for a given set of planes void camera_update_projection(Camera *self, float nearPlane, float forPlane, mat4 dest); // generates (projection * view) and uploads to the shader program void camera_matrix_to_shader(Camera *self, GLuint shader_program_ID, const char *uniform_name); // TODO: Input handling (needs full SDL context later) void camera_inputs(Camera *self, SDL_Event *event); #endif //CAMERA_H