From 044f64e796ceffff605c5f6cc71317ee096f3a52 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Sat, 3 May 2014 03:40:09 +1000 Subject: Rotate camera. --- src/extantz/Evas_3D_demo.c | 24 +++++++++++++++++++----- src/extantz/camera.c | 24 ++++++++++++------------ 2 files changed, 31 insertions(+), 17 deletions(-) (limited to 'src/extantz') diff --git a/src/extantz/Evas_3D_demo.c b/src/extantz/Evas_3D_demo.c index df05838..b01dd47 100644 --- a/src/extantz/Evas_3D_demo.c +++ b/src/extantz/Evas_3D_demo.c @@ -269,13 +269,15 @@ _sphere_init(int precision) Eina_Bool _animate_scene(void *data) { globals *ourGlobals = data; - static float angle = 0.0f; static float earthAngle = 0.0f; static int frame = 0; static int inc = 1; static int sonicFrame = 0; - Evas_Real x, y, z; + Evas_Real x, y, z, w; + EPhysics_Quaternion *quat = ephysics_quaternion_new(); + EPhysics_Quaternion *quat1 = ephysics_quaternion_new(); + EPhysics_Quaternion *result = ephysics_quaternion_new(); Scene_Data *scene = ourGlobals->scene; @@ -307,12 +309,24 @@ Eina_Bool _animate_scene(void *data) ); // Camera movement. + ephysics_quaternion_euler_set(quat1, ourGlobals->gld.move->r, ourGlobals->gld.move->s, ourGlobals->gld.move->t); + eo_do(scene->camera_node, evas_3d_node_orientation_get(EVAS_3D_SPACE_PARENT, &x, &y, &z, &w)); + ephysics_quaternion_set(quat, x, y, z, w); + ephysics_quaternion_multiply(quat, quat1, result); + ephysics_quaternion_normalize(result); + ephysics_quaternion_get(result, &x, &y, &z, &w); + eo_do(scene->camera_node, evas_3d_node_orientation_set(x, y, z, w)); + eo_do(scene->camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z)); - x += ourGlobals->gld.move->x; - y += ourGlobals->gld.move->y; - z += ourGlobals->gld.move->z; + x -= ourGlobals->gld.move->x; + y -= ourGlobals->gld.move->y; + z -= ourGlobals->gld.move->z; eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z)); + free(result); + free(quat1); + free(quat); + return EINA_TRUE; } diff --git a/src/extantz/camera.c b/src/extantz/camera.c index 331a85a..41ce25c 100644 --- a/src/extantz/camera.c +++ b/src/extantz/camera.c @@ -16,9 +16,9 @@ static void _on_camera_input_down(void *data, Evas *evas, Evas_Object *obj, void { } else if (0 == strcmp(ev->key, "Left")) - gld->move->y = 2.0; + gld->move->r = 2.0; else if (0 == strcmp(ev->key, "Right")) - gld->move->y = -2.0; + gld->move->r = -2.0; else if (0 == strcmp(ev->key, "Up")) gld->move->x = 2.0; else if (0 == strcmp(ev->key, "Down")) @@ -27,10 +27,10 @@ static void _on_camera_input_down(void *data, Evas *evas, Evas_Object *obj, void gld->move->z = -2.0; else if (0 == strcmp(ev->key, "Next")) gld->move->z = 2.0; -// else if (0 == strcmp(ev->key, "Home")) -// ; -// else if (0 == strcmp(ev->key, "End")) -// ; + else if (0 == strcmp(ev->key, "Home")) + gld->move->y = 2.0; + else if (0 == strcmp(ev->key, "End")) + gld->move->y = -2.0; else if (0 == strcmp(ev->key, "space")) gld->move->jump = 1.0; else @@ -119,9 +119,9 @@ static void _on_camera_input_up(void *data, Evas *evas, Evas_Object *obj, void * { } else if (0 == strcmp(ev->key, "Left")) - gld->move->y = 0.0; + gld->move->r = 0.0; else if (0 == strcmp(ev->key, "Right")) - gld->move->y = 0.0; + gld->move->r = 0.0; else if (0 == strcmp(ev->key, "Up")) gld->move->x = 0.0; else if (0 == strcmp(ev->key, "Down")) @@ -130,10 +130,10 @@ static void _on_camera_input_up(void *data, Evas *evas, Evas_Object *obj, void * gld->move->z = 0.0; else if (0 == strcmp(ev->key, "Next")) gld->move->z = 0.0; -// else if (0 == strcmp(ev->key, "Home")) -// ; -// else if (0 == strcmp(ev->key, "End")) -// ; + else if (0 == strcmp(ev->key, "Home")) + gld->move->y = 0.0; + else if (0 == strcmp(ev->key, "End")) + gld->move->y = 0.0; else if (0 == strcmp(ev->key, "space")) gld->move->jump = 0.0; else -- cgit v1.1