aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/extantz/camera.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2014-05-06 00:12:23 +1000
committerDavid Walter Seikel2014-05-06 00:12:23 +1000
commit95e4dc70ff9118d0abfd5321605385321ab02f5c (patch)
tree656aeb3983e83c22ab00ac404ba4d1448a732390 /src/extantz/camera.c
parentClean up include files. (diff)
downloadSledjHamr-95e4dc70ff9118d0abfd5321605385321ab02f5c.zip
SledjHamr-95e4dc70ff9118d0abfd5321605385321ab02f5c.tar.gz
SledjHamr-95e4dc70ff9118d0abfd5321605385321ab02f5c.tar.bz2
SledjHamr-95e4dc70ff9118d0abfd5321605385321ab02f5c.tar.xz
Shuffle stuff around into the new scenri.c and camera stuff.
Diffstat (limited to '')
-rw-r--r--src/extantz/camera.c60
1 files changed, 56 insertions, 4 deletions
diff --git a/src/extantz/camera.c b/src/extantz/camera.c
index d221ea0..c4b4757 100644
--- a/src/extantz/camera.c
+++ b/src/extantz/camera.c
@@ -1,6 +1,37 @@
1#include "extantz.h" 1#include "extantz.h"
2 2
3 3
4Eina_Bool animateCamera(globals *ourGlobals)
5{
6 Evas_Real x, y, z, w;
7 EPhysics_Quaternion *quat = ephysics_quaternion_new();
8 EPhysics_Quaternion *quat1 = ephysics_quaternion_new();
9 EPhysics_Quaternion *result = ephysics_quaternion_new();
10
11 Scene_Data *scene = ourGlobals->scene;
12
13 // Camera movement.
14 ephysics_quaternion_euler_set(quat1, ourGlobals->gld.move->r, ourGlobals->gld.move->s, ourGlobals->gld.move->t);
15 eo_do(scene->camera_node, evas_3d_node_orientation_get(EVAS_3D_SPACE_PARENT, &x, &y, &z, &w));
16 ephysics_quaternion_set(quat, x, y, z, w);
17 ephysics_quaternion_multiply(quat, quat1, result);
18 ephysics_quaternion_normalize(result);
19 ephysics_quaternion_get(result, &x, &y, &z, &w);
20 eo_do(scene->camera_node, evas_3d_node_orientation_set(x, y, z, w));
21
22 eo_do(scene->camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
23 x -= ourGlobals->gld.move->x;
24 y -= ourGlobals->gld.move->y;
25 z -= ourGlobals->gld.move->z;
26 eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z));
27
28 free(result);
29 free(quat1);
30 free(quat);
31
32 return EINA_TRUE;
33}
34
4static void _on_camera_input_down(void *data, Evas *evas, Evas_Object *obj, void *event_info) 35static void _on_camera_input_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
5{ 36{
6 globals *ourGlobals = data; 37 globals *ourGlobals = data;
@@ -151,10 +182,31 @@ static Eina_Bool _cb_event_GL(void *data, Evas_Object *obj, Evas_Object *src, Ev
151 return processed; 182 return processed;
152} 183}
153 184
154void cameraAdd(globals *ourGlobals, Evas_Object *win) 185Evas_3D_Node *cameraAdd(globals *ourGlobals, Scene_Data *scene, Evas_Object *image)
155{ 186{
187 Evas_3D_Node *result = NULL;
188 Evas_3D_Camera *camera;
189
190 camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas,
191 evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0)
192 );
193
194 result = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA);
195 eo_do(result,
196 evas_3d_node_camera_set(camera),
197 evas_3d_node_position_set(50.0, 0.0, 20.0),
198 evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0)
199 );
200
201 eo_do(scene->root_node, evas_3d_node_member_add(result));
202 eo_do(scene->scene, evas_3d_scene_camera_node_set(result));
203
156 // In this code, we are making our own camera, so grab it's input when we are focused. 204 // In this code, we are making our own camera, so grab it's input when we are focused.
157 evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, _on_camera_input_down, ourGlobals); 205 evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_camera_input_down, ourGlobals);
158 evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_UP, _on_camera_input_up, ourGlobals); 206 evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_UP, _on_camera_input_up, ourGlobals);
159 elm_object_event_callback_add(win, _cb_event_GL, ourGlobals); 207 elm_object_event_callback_add(image, _cb_event_GL, ourGlobals);
208
209 ourGlobals->gld.move = calloc(1, sizeof(cameraMove));
210
211 return result;
160} 212}