$darkmode
Suckless OGL 1.0.0
A lean, high-performance C11 PBR Renderer
camera.h
Go to the documentation of this file.
1 
6 #ifndef CAMERA_H
7 #define CAMERA_H
8 
9 #include <cglm/cglm.h>
10 
11 /* --- Camera Defaults --- */
12 
13 #define DEFAULT_CAMERA_SPEED 15.0F
14 #define DEFAULT_CAMERA_SENSITIVITY 0.15F
15 #define DEFAULT_CAMERA_ZOOM 60.0F
16 #define DEFAULT_ZOOM_SPEED 1.0F
17 #define DEFAULT_SCROLL_SENSITIVITY 50.0F
18 #define DEFAULT_MAX_PITCH 89.0F
19 #define DEFAULT_MIN_PITCH -89.0F
20 #define DEFAULT_MAX_ALPHA 1.0F
21 #define DEFAULT_ACCELERATION 10.0F
22 #define DEFAULT_FRICTION 0.85F
23 #define DEFAULT_ROTATION_SMOOTHING 0.18F
24 #define DEFAULT_BOBBING_FREQUENCY 2.2F
25 #define DEFAULT_BOBBING_AMPLITUDE 0.0004F
26 #define DEFAULT_MIN_VELOCITY_FOR_BOBBING \
27  0.5F
28 #define DEFAULT_BOBBING_RESET_SPEED 0.95F
29 #define DEFAULT_MIN_VELOCITY 0.01F
30 #define DEFAULT_TARGET_FPS 60
31 #define DEFAULT_FIXED_TIMESTEP \
32  (1.0F / DEFAULT_TARGET_FPS)
33 #define DEFAULT_MOUSE_SMOOTHING_FACTOR 0.1F
40 typedef struct Camera {
41  vec3 position;
42  vec3 front;
43  vec3 up;
44  vec3 right;
45  vec3 world_up;
47  float yaw;
48  float pitch;
50  float velocity;
51  float sensitivity;
52  float zoom;
54  /* Movement states (booleans) */
57  int move_left;
59  int move_up;
60  int move_down;
61 
62  /* Realistic physics */
64  float acceleration;
65  float friction;
68  /* Smooth rotation */
69  float yaw_target;
70  float pitch_target;
72  float smoothed_x;
73  float smoothed_y;
75  /* Head bobbing */
76  float bobbing_time;
79  float
83  /* Timing */
90  /* Input State */
91  double last_mouse_x;
92  double last_mouse_y;
94 } Camera;
95 
103 void camera_init(Camera* cam, float distance, float yaw, float pitch);
104 
110 void camera_update_vectors(Camera* cam);
111 
118 void camera_process_mouse(Camera* cam, float xoffset, float yoffset);
119 
125 void camera_get_view_matrix(Camera* cam, mat4 view);
126 
132 void camera_process_scroll(Camera* cam, float yoffset);
133 
140 void camera_fixed_update(Camera* cam);
141 
142 #endif /* CAMERA_H */
void camera_init(Camera *cam, float distance, float yaw, float pitch)
Initializes the camera with default values.
Definition: camera.c:9
void camera_get_view_matrix(Camera *cam, mat4 view)
Generates the 4x4 view matrix for this camera.
Definition: camera.c:162
void camera_fixed_update(Camera *cam)
Performs one fixed-step physics update.
Definition: camera.c:73
void camera_process_scroll(Camera *cam, float yoffset)
Processes mouse scroll events to apply physical impulse.
Definition: camera.c:169
void camera_update_vectors(Camera *cam)
Recalculates front, right, and up vectors from yaw and pitch.
Definition: camera.c:57
void camera_process_mouse(Camera *cam, float xoffset, float yoffset)
Processes mouse movement to update target orientation.
Definition: camera.c:141
Represents a 3D camera with orientation, movement, and physical properties.
Definition: camera.h:40
int move_backward
Definition: camera.h:56
int move_up
Definition: camera.h:59
double last_mouse_x
Definition: camera.h:91
float acceleration
Definition: camera.h:64
float yaw_target
Definition: camera.h:69
float zoom
Definition: camera.h:52
float rotation_smoothing
Definition: camera.h:71
float bobbing_time
Definition: camera.h:76
int first_mouse
Definition: camera.h:93
float velocity
Definition: camera.h:50
float sensitivity
Definition: camera.h:51
int move_down
Definition: camera.h:60
vec3 velocity_current
Definition: camera.h:63
float bobbing_amplitude
Definition: camera.h:80
float fixed_timestep
Definition: camera.h:85
vec3 position
Definition: camera.h:41
int move_forward
Definition: camera.h:55
float smoothed_y
Definition: camera.h:73
vec3 front
Definition: camera.h:42
float mouse_smoothing_factor
Definition: camera.h:87
float smoothed_x
Definition: camera.h:72
float friction
Definition: camera.h:65
int move_left
Definition: camera.h:57
float bobbing_frequency
Definition: camera.h:78
vec3 world_up
Definition: camera.h:45
float pitch_target
Definition: camera.h:70
float pitch
Definition: camera.h:48
vec3 right
Definition: camera.h:44
int bobbing_enabled
Definition: camera.h:81
float yaw
Definition: camera.h:47
float physics_accumulator
Definition: camera.h:84
int move_right
Definition: camera.h:58
double last_mouse_y
Definition: camera.h:92
vec3 up
Definition: camera.h:43