summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/extend/camera.c24
-rw-r--r--src/extend/camera.h21
-rw-r--r--src/main.c14
3 files changed, 31 insertions, 28 deletions
diff --git a/src/extend/camera.c b/src/extend/camera.c
index 15bcc58..6426193 100644
--- a/src/extend/camera.c
+++ b/src/extend/camera.c
@@ -2,6 +2,26 @@
#include "../core/device.h"
#include "camera.h"
+// 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;
Camera* camera_create(wog_Window* wnd, CameraConfig* config) {
Camera* cam = ssrM_new(Camera);
@@ -135,10 +155,10 @@ void camera_onupdate(Camera* cam, float dt) {
void camera_ondraw(Camera* cam) {
/*set vp matrix*/
ssr_matrixmode(MATRIX_PROJECTION);
- camera_getprojmatrix(&cam, NULL);
+ camera_getprojmatrix(cam, NULL);
ssr_loadmatrix(&cam->cached_proj_matrix);
ssr_matrixmode(MATRIX_VIEW);
- camera_getviewmatrix(&cam, NULL);
+ camera_getviewmatrix(cam, NULL);
ssr_loadmatrix(&cam->cached_view_matrix);
ssr_matrixmode(MATRIX_MODEL);
/*set builtin variables*/
diff --git a/src/extend/camera.h b/src/extend/camera.h
index 98e3e5a..add3684 100644
--- a/src/extend/camera.h
+++ b/src/extend/camera.h
@@ -8,26 +8,7 @@
#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 Camera Camera;
typedef struct {
Vec3 position;
diff --git a/src/main.c b/src/main.c
index 9f0a017..b0ee5df 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,6 +31,7 @@ F ondraw;
int main(int argc, char* argv[]) {
wog_Window* wnd = wog_createWindow("Soft Shade Room", SCREEN_WIDTH, SCREEN_HEIGHT, 500, 500, 0);
wog_Surface* surface = wog_getsurface(wnd); // ARGB format
+ Camera* camera;
/* init ssr */
ssr_Config config = {
SCREEN_WIDTH, SCREEN_HEIGHT,
@@ -41,15 +42,16 @@ int main(int argc, char* argv[]) {
SETEXAMPLE(EXAMPLECUR);
/*set up global camera*/
CameraConfig cam_config = { /*default camera setting*/
- {0, 700, 0},
+ {0, 0, 800},
{0, 0, 0},
- 60, SCREEN_WIDTH / SCREEN_HEIGHT, 0.1, 2000,
- 5, 150,
+ 60, SCREEN_WIDTH / SCREEN_HEIGHT, 0.1, 1500,
+ {5, 5}, {150, 150},
4000,
};
onload(&cam_config);
- Camera* camera = camera_create(wnd, &cam_config);
+ camera = camera_create(wnd, &cam_config);
wog_show(wnd);
+
/* main loop */
uint prev = wog_tick();
uint dt = 0;
@@ -60,7 +62,7 @@ int main(int argc, char* argv[]) {
while (1) {
/*handle events*/
while (wog_pollEvent(wnd, &e)) {
- camera_onevent(&camera, &e, _dt);
+ camera_onevent(camera, &e, _dt);
if (e.type == WOG_ECLOSE) {
goto quit;
} else {
@@ -84,7 +86,7 @@ int main(int argc, char* argv[]) {
/*update*/
_dt = dt / 1000.f;
- camera_onupdate(&camera, _dt);
+ camera_onupdate(camera, _dt);
onupdate(&_dt);
/*draw*/