From 27687536844ed3b045bba1abd1aae8bb3692f6cb Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 26 Feb 2020 00:01:07 +0800 Subject: *camera --- src/extend/camera.c | 24 ++++++++++++++++++++++-- src/extend/camera.h | 21 +-------------------- src/main.c | 14 ++++++++------ 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*/ -- cgit v1.1-26-g67d0