summaryrefslogtreecommitdiff
path: root/archive/src/core/camera.h
blob: 4300f87268b1906c409070d19268e994f1cad3bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#pragma once

#include "defines.h"
#include "maths_types.h"

// TODO: swap to position + quaternion

typedef struct Camera {
  Vec3 position;
  Vec3 front;
  Vec3 up;
  f32 fov;
} Camera;

/** @brief create a camera */
PUB Camera Camera_Create(Vec3 pos, Vec3 front, Vec3 up, f32 fov);

/**
 * @brief Get 3D camera transform matrix
 * @param out_view optionally stores just the view matrix
 * @param out_proj optionally stores just the projection matrix
 * @returns the camera's view projection matrix pre-multiplied
 */
PUB Mat4 Camera_ViewProj(Camera* c, f32 lens_height, f32 lens_width, Mat4* out_view,
                         Mat4* out_proj);

/** @brief Get 2D camera transform matrix */
PUB Mat4 Camera_View2D(Camera* c);  // TODO: 2D cameras

struct Input_State;

PUB void FlyCamera_Update(Camera* camera);

// TODO: (HIGH) Basic reusable camera controls
/*
Right click + move = pan
Left click = orbit camera
WASD = forward/backward/left/right
*/