summaryrefslogtreecommitdiff
path: root/src/extend/camera.h
blob: 98e3e5afcd95aa46b4252a578049dab5f01a1f2c (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#ifndef _SOFTSHADEROOM_CAMERA_H_
#define _SOFTSHADEROOM_CAMERA_H_

#include "../math/math.h"
#include "../extern/wog.h"
#include "transform.h"

#undef near 
#undef far

// A unity editor style camera
typedef struct Camera {
	Transform transform;
	float fov, aspect, near, far;
	/*matrix*/
	Mat4 cached_view_matrix; /*or WorldToCameraMatrix*/
	Mat4 cached_proj_matrix;
	bool is_viewdirty, is_projdirty;
	/*operations*/
	float zoom_speed;
	Vec2 rotate_sensitivity;
	Vec2 move_sensitivity;
	Euler euler;
	/*events*/
	bool look_around;
	Vec2 mouse_prev;
	bool move_around;
	/*window*/
	wog_Window* wnd;
} Camera;

typedef struct {
	Vec3 position;
	Euler euler;
	float fov, aspect, near, far;
	Vec2 rotate_sensitivity, move_sensitivity; 
	float zoom_speed;
}CameraConfig;

Camera* camera_create(wog_Window* wnd, CameraConfig* config);
void camera_destroy(Camera* cam);

void camera_setposition(float x, float y, float z);

void camera_onevent(Camera* cam, wog_Event* e, float dt);
void camera_onupdate(Camera* cam, float dt);

void camera_getmatrix(Mat4* view, Mat4* proj);

void camera_getviewmatrix(Camera* cam, Mat4* view);
void camera_getprojmatrix(Camera* cam, Mat4* proj);

void camera_ondraw(Camera* cam);

#endif