bad char
[vg.git] / vg_camera.h
1 #pragma once
2
3 #include "vg_m.h"
4
5 typedef struct vg_camera vg_camera;
6 struct vg_camera
7 {
8 /* Input */
9 v3f angles;
10 v3f pos;
11 f32 fov, nearz, farz;
12
13 /* Output */
14 m4x3f transform,
15 transform_inverse;
16
17 struct vg_camera_mtx{
18 m4x4f p,
19 v,
20 pv;
21 }
22 mtx,
23 mtx_prev;
24 };
25
26 void vg_camera_lerp_angles( v3f a, v3f b, f32 t, v3f d );
27
28 /* lerp position, fov, and angles */
29 void vg_camera_lerp( vg_camera *a, vg_camera *b, f32 t, vg_camera *d );
30 void vg_camera_copy( vg_camera *a, vg_camera *d );
31 void vg_m4x3_transform_camera( m4x3f m, vg_camera *cam );
32
33 /*
34 * 1) [angles, pos] -> transform
35 */
36 void vg_camera_update_transform( vg_camera *cam );
37
38 /*
39 * 2) [transform] -> transform_inverse, view matrix
40 */
41 void vg_camera_update_view( vg_camera *cam );
42
43 /*
44 * 3) [fov,nearz,farz] -> projection matrix
45 */
46 void vg_camera_update_projection( vg_camera *cam );
47
48 /*
49 * 4) [projection matrix, view matrix] -> previous pv, new pv
50 */
51 void vg_camera_finalize( vg_camera *cam );