LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_camera.h
1/*
2 * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2026
3 * All rights reserved
4 */
5
6#ifndef LG_CAMERA_H
7#define LG_CAMERA_H
8
9/* Global default camera values */
10
11#define LG_CAMERA_ORIGIN 0.0, 0.0, 0.0 /* Initial camera or "eye" position */
12#define LG_CAMERA_TARGET 0.0, 0.0, -1.0
13#define LG_CAMERA_UP 0.0, 1.0, 0.0
14
15#define LG_V_FOV 45
16#define LG_Z_NEAR 0.1 /* Usually in range [0.1, 1.0] */
17#define LG_Z_FAR 1000.0 /* Usually >= 100.0 */
18
19/*
20 * Forward vec3 = normalized(target - position)
21 */
22typedef struct {
23 vec3_t position; /* Or "eye" position in world coords */
24 LG_Quat orientation; /* Must update target after setting/changing orientation */
25 vec3_t target; /* Target position in world coords - SHOULD ALWAYS ONLY BE UPDATED FROM ORIENTATION QUAT - exception for lg_camera_look_at() */
26 vec3_t up; /* Must be normalized */
27 float v_fov; /* Vertical field of view in deg */
28 float z_near; /* Clipping plane along the Z axis, always > 0 */
29 float z_far; /* Clipping plane along the Z axis, always > 0 */
30 mat4_t view_m; /* View/proj matrices - must be updated when position or orientation changes */
31 mat4_t proj_m;
32 mat4_t view_proj_m;
33 zboolean new_view; /* Dirty flag */
34 zboolean new_proj;
35 LG_InputState input_state; /* To capture user input */
36} LG_Camera;
37
38typedef struct {
39 float a, b, c, d;
40} LG_Plane;
41
42typedef struct {
43 LG_Plane left;
44 LG_Plane right;
45 LG_Plane bottom;
46 LG_Plane top;
47 LG_Plane near;
48 LG_Plane far;
50
52
54
55int lg_camera_set_all(LG_Camera *, vec3_t, vec3_t, vec3_t, float, float, float);
56
58
60
62
64
66
68
70
72
73int lg_camera_rotate_by_eu(LG_Camera *, LG_EulerAng, const char *);
74
76
78
80
81void lg_camera_orbit_around(LG_Camera *, vec3_t, float, float);
82
84
85zboolean is_in_frustum(vec3_t *, LG_Frustum *);
86
87zboolean lg_cuboid_is_in_frustum(LG_Cuboid *, LG_Frustum *, zboolean);
88
89zboolean lg_mesh_is_in_frustum(LG_Mesh *, LG_Frustum *, zboolean);
90
92
94
95void reset_orbit_cam_yaw_and_pitch();
96
98
100
102
104
106
107#endif /* LG_CAMERA_H */
LG_Camera lg_camera()
Definition lg_camera.c:115
float lg_point_to_plane_distance(vec3_t *v, LG_Plane *p)
Definition lg_camera.c:705
mat4_t lg_camera_compute_view_proj_matrix_RH(LG_Camera *cam)
Definition lg_camera.c:268
int lg_camera_move_to(LG_Camera *cam, vec3_t transl)
Definition lg_camera.c:304
void lg_update_all_cam_m(LG_Camera *cam)
Definition lg_camera.c:281
void lg_camera_get_frustum(LG_Camera *cam, LG_Frustum *frustum)
Definition lg_camera.c:511
int lg_camera_look_at(LG_Camera *cam, vec3_t target)
Definition lg_camera.c:329
void lg_camera_info(LG_Camera *cam)
Definition lg_camera.c:728
zboolean lg_cuboid_is_in_frustum(LG_Cuboid *cuboid, LG_Frustum *frustum, zboolean fully)
Definition lg_camera.c:605
void lg_frustum_info(LG_Frustum *frustum)
Definition lg_camera.c:757
zboolean is_in_frustum(vec3_t *v, LG_Frustum *frustum)
Definition lg_camera.c:583
int lg_camera_rotate_by_quat(LG_Camera *cam, LG_Quat q)
Definition lg_camera.c:403
int lg_plane_normalize(LG_Plane *p)
Definition lg_camera.c:677
mat4_t lg_camera_compute_proj_matrix_RH(LG_Camera *cam)
Definition lg_camera.c:249
int lg_camera_set_all(LG_Camera *cam, vec3_t position, vec3_t target, vec3_t up, float v_fov, float z_near, float z_far)
Definition lg_camera.c:180
int lg_camera_reset(LG_Camera *cam)
Definition lg_camera.c:218
int lg_camera_init(LG_Camera *cam)
Definition lg_camera.c:142
void lg_camera_orbit_around(LG_Camera *cam, vec3_t target, float yaw, float pitch)
Definition lg_camera.c:482
int lg_camera_set_rot_by_quat(LG_Camera *cam, LG_Quat q)
Definition lg_camera.c:450
int lg_camera_rotate_by_eu(LG_Camera *cam, LG_EulerAng ang, const char *rot_order)
Definition lg_camera.c:389
zboolean lg_mesh_is_in_frustum(LG_Mesh *mesh, LG_Frustum *frustum, zboolean fully)
Definition lg_camera.c:634
void lg_camera_override_zfar(LG_Camera *cam, float z_far)
Definition lg_camera.c:663
int lg_camera_set_rot_by_eu(LG_Camera *cam, LG_EulerAng ang, const char *rot_order)
Definition lg_camera.c:436
void lg_camera_override_znear(LG_Camera *cam, float z_near)
Definition lg_camera.c:647
int lg_camera_look_at_by_k(LG_Camera *cam, vec3_t target, float rot_k)
Definition lg_camera.c:356
mat4_t lg_camera_compute_view_matrix_RH(LG_Camera *cam)
Definition lg_camera.c:231
float lg_point_to_norm_plane_distance(vec3_t *v, LG_Plane *p)
Definition lg_camera.c:718
Definition lg_camera.h:22
Definition lg_3d_primitives.h:67
Definition lg_quaternions.h:26
Definition lg_camera.h:42
Definition lg_ui.h:30
Definition lg_mesh.h:84
Definition lg_camera.h:38
Definition lg_quaternions.h:18
Definition math_3d.h:123
Definition math_3d.h:179