From 95e4dc70ff9118d0abfd5321605385321ab02f5c Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Tue, 6 May 2014 00:12:23 +1000 Subject: Shuffle stuff around into the new scenri.c and camera stuff. --- src/extantz/Evas_3D_demo.c | 243 +------------------------------------------- src/extantz/build.lua | 4 +- src/extantz/camera.c | 60 ++++++++++- src/extantz/extantz.c | 3 +- src/extantz/extantz.h | 6 +- src/extantz/extantzCamera.h | 8 +- src/extantz/scenri.c | 147 +++++++++++++++++++++++++++ src/extantz/scenri.h | 43 ++++++++ 8 files changed, 260 insertions(+), 254 deletions(-) create mode 100644 src/extantz/scenri.c create mode 100644 src/extantz/scenri.h diff --git a/src/extantz/Evas_3D_demo.c b/src/extantz/Evas_3D_demo.c index 7e3e8cd..dbc589d 100644 --- a/src/extantz/Evas_3D_demo.c +++ b/src/extantz/Evas_3D_demo.c @@ -1,7 +1,5 @@ #include "extantz.h" - - -static Scene_Data ourScene; +#include "scenri.h" static const float cube_vertices[] = @@ -81,36 +79,6 @@ static const unsigned int pixels1[] = }; -typedef struct _vec4 -{ - float x; - float y; - float z; - float w; -} vec4; - -typedef struct _vec3 -{ - float x; - float y; - float z; -} vec3; - -typedef struct _vec2 -{ - float x; - float y; -} vec2; - -typedef struct _vertex -{ - vec3 position; - vec3 normal; - vec3 tangent; - vec4 color; - vec3 texcoord; -} vertex; - static int vertex_count = 0; static vertex *sphere_vertices = NULL; @@ -265,7 +233,6 @@ _sphere_init(int precision) } } - Eina_Bool _animate_scene(globals *ourGlobals) { static float angle = 0.0f; @@ -273,10 +240,6 @@ Eina_Bool _animate_scene(globals *ourGlobals) static int frame = 0; static int inc = 1; static int sonicFrame = 0; - 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,67 +270,9 @@ Eina_Bool _animate_scene(globals *ourGlobals) evas_3d_node_orientation_angle_axis_set(angle, 0.0, 1.0, 0.0) ); - // 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; - eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z)); - - free(result); - free(quat1); - free(quat); - return EINA_TRUE; } - -static void -_camera_setup(globals *ourGlobals, Scene_Data *scene) -{ - scene->camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas, - evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0) - ); - - scene->camera_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA); - eo_do(scene->camera_node, - evas_3d_node_camera_set(scene->camera), - evas_3d_node_position_set(50.0, 0.0, 20.0), - 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) - ); - - eo_do(scene->root_node, evas_3d_node_member_add(scene->camera_node)); -} - -static void -_light_setup(globals *ourGlobals, Scene_Data *scene) -{ - scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas, - evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0), - evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0), - evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0), - evas_3d_light_directional_set(EINA_TRUE) - ); - - scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT); - eo_do(scene->light_node, - evas_3d_node_light_set(scene->light), - evas_3d_node_position_set(1000.0, 0.0, 1000.0), - evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0) - ); - - eo_do(scene->root_node, evas_3d_node_member_add(scene->light_node)); - -} - static void _cube_setup(globals *ourGlobals, Scene_Data *scene) { char buf[PATH_MAX]; @@ -541,151 +446,13 @@ static void _earth_setup(globals *ourGlobals, Scene_Data *scene) } -static void -_scene_setup(globals *ourGlobals, Scene_Data *scene) -{ - // TODO - I have no idea how this should work. - // It seems the people that wrote the examples don't know either. lol -// scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); - scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); - - scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas, - evas_3d_scene_root_node_set(scene->root_node), - evas_3d_scene_size_set(512, 512), - evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0) - ); - - _camera_setup(ourGlobals, scene); - _light_setup(ourGlobals, scene); - _cube_setup(ourGlobals, scene); - _sonic_setup(ourGlobals, scene); - _earth_setup(ourGlobals, scene); - - eo_do(scene->scene, - evas_3d_scene_camera_node_set(scene->camera_node) - ); -} - - -static void _on_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) -{ - Scene_Data *scene = data; - Evas_Event_Mouse_Move *ev = einfo; - Evas_Coord x, y, w, h; - Evas_Coord obj_x, obj_y; - int scene_w, scene_h; - Evas_Real scene_x, scene_y; - Evas_Real s, t; - Evas_3D_Node *n; - Evas_3D_Mesh *m; - Eina_Bool pick; - char *name = NULL; - - evas_object_geometry_get(o, &x, &y, &w, &h); - - obj_x = ev->cur.canvas.x - x; - obj_y = ev->cur.canvas.y - y; - - eo_do(scene->scene, evas_3d_scene_size_get(&scene_w, &scene_h)); - - scene_x = obj_x * scene_w / (Evas_Real)w; - scene_y = obj_y * scene_h / (Evas_Real)h; - - eo_do(scene->scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t)); - if (pick) - name = evas_object_data_get(n, "Name"); - // This is a raw Evas callback, on the Elm image internal Evas_Object. - // So we need to get the Elm Image back from the raw Evas_Object. - // Which is why we stuffed it in the scene structure. - if (name) - { - elm_object_tooltip_text_set(scene->image, name); - elm_object_tooltip_show(scene->image); - } - else - { - elm_object_tooltip_text_set(scene->image, ""); - elm_object_tooltip_hide(scene->image); - } -} - -static void _on_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) -{ - Scene_Data *scene = data; - Evas_Event_Mouse_Down *ev = einfo; - Evas_Coord x, y, w, h; - Evas_Coord obj_x, obj_y; - int scene_w, scene_h; - Evas_Real scene_x, scene_y; - Evas_Real s, t; - Evas_3D_Node *n; - Evas_3D_Mesh *m; - Eina_Bool pick; - char *name = NULL; - - // Set the focus onto us. - elm_object_focus_set(o, EINA_TRUE); - - evas_object_geometry_get(o, &x, &y, &w, &h); - - obj_x = ev->canvas.x - x; - obj_y = ev->canvas.y - y; - - eo_do(scene->scene, evas_3d_scene_size_get(&scene_w, &scene_h)); - - scene_x = obj_x * scene_w / (Evas_Real)w; - scene_y = obj_y * scene_h / (Evas_Real)h; - - eo_do(scene->scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t)); - if (pick) - { - name = evas_object_data_get(n, "Name"); - printf("Picked : "); - } - else - printf("Not picked : "); - if (NULL == name) - name = ""; - - printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) " - "node(%p) %s mesh(%p)\n", - ev->output.x, ev->output.y, - ev->canvas.x, ev->canvas.y, - obj_x, obj_y, - scene_x, scene_y, - s, t, n, name, m); -} - void Evas_3D_Demo_add(globals *ourGlobals) { - Evas_Object *obj, *temp; - - ourGlobals->scene = &ourScene; - _scene_setup(ourGlobals, &ourScene); - - // Add an image object for 3D scene rendering. - obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win, - evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), - elm_obj_image_fill_outside_set(EINA_TRUE), - evas_obj_visibility_set(EINA_TRUE), - temp = elm_obj_image_object_get() - ); - elm_object_tooltip_text_set(obj, ""); - elm_object_tooltip_hide(obj); - ourScene.image = obj; - - eo_do(temp, - evas_obj_image_scene_set(ourScene.scene) - ); - // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead. - evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, &ourScene); - evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, &ourScene); - - cameraAdd(ourGlobals, obj); - elm_win_resize_object_add(ourGlobals->win, obj); -// elm_box_pack_end(ourGlobals->gld.bx, obj); + ourGlobals->scene = scenriAdd(ourGlobals); - ourGlobals->gld.move = calloc(1, sizeof(cameraMove)); + _cube_setup(ourGlobals, ourGlobals->scene); + _sonic_setup(ourGlobals, ourGlobals->scene); + _earth_setup(ourGlobals, ourGlobals->scene); } void Evas_3D_Demo_fini(globals *ourGlobals) diff --git a/src/extantz/build.lua b/src/extantz/build.lua index 5ea2029..c50f4da 100755 --- a/src/extantz/build.lua +++ b/src/extantz/build.lua @@ -18,11 +18,11 @@ LDFLAGS = LDFLAGS .. ' -L../../libraries/irrlicht-1.8.1/lib/Linux' libs = libs .. ' -lIrrlicht -lGL -lbz2 -lGuiLua -lwinFang -lRunnr' removeFiles(dir, {'crappisspuke.o', 'CDemo.o', 'extantzCamera.o', 'gears.o', 'ephysics_demo.o', 'Evas_3D_demo.o', '../../media/extantz.edj'}) -removeFiles(dir, {'../../extantz', 'camera.o', 'chat.o', 'files.o', 'woMan.o'}) +removeFiles(dir, {'../../extantz', 'camera.o', 'chat.o', 'files.o', 'scenri.o', 'woMan.o'}) runCommand('edje_cc', dir, 'edje_cc ' .. EDJE_FLAGS .. ' extantz.edc ../../media/extantz.edj') runCommand('Irrlicht files', dir, 'g++ ' .. CFLAGS .. ' -ffast-math -c crappisspuke.cpp -o crappisspuke.o ' .. LDFLAGS) runCommand(nil, dir, 'g++ ' .. CFLAGS .. ' -ffast-math -c CDemo.cpp -o CDemo.o ' .. LDFLAGS) runCommand(nil, dir, 'g++ ' .. CFLAGS .. ' -ffast-math -c extantzCamera.cpp -o extantzCamera.o ' .. LDFLAGS) CFLAGS = CFLAGS .. ' -Wl,-export-dynamic' -compileFiles('../../extantz', dir, {'gears', 'ephysics_demo', 'camera', 'Evas_3D_demo', 'chat', 'files', 'woMan', 'extantz'}, 'crappisspuke.o CDemo.o extantzCamera.o') +compileFiles('../../extantz', dir, {'gears', 'ephysics_demo', 'camera', 'Evas_3D_demo', 'chat', 'files', 'scenri', 'woMan', 'extantz'}, 'crappisspuke.o CDemo.o extantzCamera.o') 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 @@ #include "extantz.h" +Eina_Bool animateCamera(globals *ourGlobals) +{ + 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; + + // 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; + eo_do(scene->camera_node, evas_3d_node_position_set(x, y, z)); + + free(result); + free(quat1); + free(quat); + + return EINA_TRUE; +} + static void _on_camera_input_down(void *data, Evas *evas, Evas_Object *obj, void *event_info) { globals *ourGlobals = data; @@ -151,10 +182,31 @@ static Eina_Bool _cb_event_GL(void *data, Evas_Object *obj, Evas_Object *src, Ev return processed; } -void cameraAdd(globals *ourGlobals, Evas_Object *win) +Evas_3D_Node *cameraAdd(globals *ourGlobals, Scene_Data *scene, Evas_Object *image) { + Evas_3D_Node *result = NULL; + Evas_3D_Camera *camera; + + camera = eo_add(EVAS_3D_CAMERA_CLASS, ourGlobals->evas, + evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0) + ); + + result = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_CAMERA); + eo_do(result, + evas_3d_node_camera_set(camera), + evas_3d_node_position_set(50.0, 0.0, 20.0), + 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) + ); + + eo_do(scene->root_node, evas_3d_node_member_add(result)); + eo_do(scene->scene, evas_3d_scene_camera_node_set(result)); + // In this code, we are making our own camera, so grab it's input when we are focused. - evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, _on_camera_input_down, ourGlobals); - evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_UP, _on_camera_input_up, ourGlobals); - elm_object_event_callback_add(win, _cb_event_GL, ourGlobals); + evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_DOWN, _on_camera_input_down, ourGlobals); + evas_object_event_callback_add(image, EVAS_CALLBACK_KEY_UP, _on_camera_input_up, ourGlobals); + elm_object_event_callback_add(image, _cb_event_GL, ourGlobals); + + ourGlobals->gld.move = calloc(1, sizeof(cameraMove)); + + return result; } diff --git a/src/extantz/extantz.c b/src/extantz/extantz.c index d0cd8ef..11f1d4e 100644 --- a/src/extantz/extantz.c +++ b/src/extantz/extantz.c @@ -170,6 +170,7 @@ static void _draw_gl(Evas_Object *obj) #endif _animate_scene(ourGlobals); + animateCamera(ourGlobals); #if USE_IRR drawIrr_end(ourGlobals); @@ -363,7 +364,7 @@ void overlay_add(globals *ourGlobals) // According to the Elm inlined image window example, this is what's needed to. evas_object_event_callback_add(elm_win_inlined_image_object_get(gld->winwin), EVAS_CALLBACK_MOUSE_DOWN, _cb_mouse_down_elm, NULL); // In this code, we are making our own camera, so grab it's input when we are focused. - cameraAdd(ourGlobals, gld->winwin); +// cameraAdd(ourGlobals, gld->winwin); elm_win_alpha_set(gld->winwin, EINA_TRUE); // Apparently transparent is not good enough for ELM backgrounds, so make it a rectangle. diff --git a/src/extantz/extantz.h b/src/extantz/extantz.h index 4ecf8e8..c22a61d 100644 --- a/src/extantz/extantz.h +++ b/src/extantz/extantz.h @@ -9,6 +9,7 @@ #include "winFang.h" #include "GuiLua.h" +#include "scenri.h" #include #include @@ -137,7 +138,6 @@ typedef struct _Scene_Data Evas_3D_Node *camera_node; Evas_3D_Node *light_node; - Evas_3D_Camera *camera; Evas_3D_Light *light; Evas_3D_Mesh *mesh; @@ -254,7 +254,9 @@ EAPI void Evas_3D_Demo_add(globals *ourGlobals); Eina_Bool _animate_scene(globals *ourGlobals); void Evas_3D_Demo_fini(globals *ourGlobals); -void cameraAdd(globals *ourGlobals, Evas_Object *win); +Scene_Data *scenriAdd(globals *ourGlobals); +Evas_3D_Node *cameraAdd(globals *ourGlobals, Scene_Data *scene, Evas_Object *win); +Eina_Bool animateCamera(globals *ourGlobals); winFang *chat_add(globals *ourGlobals); winFang *filesAdd(globals *ourGlobals, char *path, Eina_Bool multi, Eina_Bool save); diff --git a/src/extantz/extantzCamera.h b/src/extantz/extantzCamera.h index 9d74236..6e9067f 100644 --- a/src/extantz/extantzCamera.h +++ b/src/extantz/extantzCamera.h @@ -13,6 +13,7 @@ #include #include #include +#include "scenri.h" using namespace irr; using namespace scene; @@ -23,13 +24,6 @@ typedef struct extantzCamera extantzCamera; typedef struct ICameraSceneNode ICameraSceneNode; #endif -typedef struct -{ - float x, y, z; - float r, s, t; - float jump; - float JumpSpeed, RotateSpeed, MoveSpeed; -} cameraMove; cameraMove *getCameraMove(ICameraSceneNode *camera); diff --git a/src/extantz/scenri.c b/src/extantz/scenri.c new file mode 100644 index 0000000..0805108 --- /dev/null +++ b/src/extantz/scenri.c @@ -0,0 +1,147 @@ +#include "extantz.h" +#include "scenri.h" + +static void _on_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) +{ + Scene_Data *scene = data; + Evas_Event_Mouse_Move *ev = einfo; + Evas_Coord x, y, w, h; + Evas_Coord obj_x, obj_y; + int scene_w, scene_h; + Evas_Real scene_x, scene_y; + Evas_Real s, t; + Evas_3D_Node *n; + Evas_3D_Mesh *m; + Eina_Bool pick; + char *name = NULL; + + evas_object_geometry_get(o, &x, &y, &w, &h); + + obj_x = ev->cur.canvas.x - x; + obj_y = ev->cur.canvas.y - y; + + eo_do(scene->scene, evas_3d_scene_size_get(&scene_w, &scene_h)); + + scene_x = obj_x * scene_w / (Evas_Real)w; + scene_y = obj_y * scene_h / (Evas_Real)h; + + eo_do(scene->scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t)); + if (pick) + name = evas_object_data_get(n, "Name"); + // This is a raw Evas callback, on the Elm image internal Evas_Object. + // So we need to get the Elm Image back from the raw Evas_Object. + // Which is why we stuffed it in the scene structure. + if (name) + { + elm_object_tooltip_text_set(scene->image, name); + elm_object_tooltip_show(scene->image); + } + else + { + elm_object_tooltip_text_set(scene->image, ""); + elm_object_tooltip_hide(scene->image); + } +} + +static void _on_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *o, void *einfo) +{ + Scene_Data *scene = data; + Evas_Event_Mouse_Down *ev = einfo; + Evas_Coord x, y, w, h; + Evas_Coord obj_x, obj_y; + int scene_w, scene_h; + Evas_Real scene_x, scene_y; + Evas_Real s, t; + Evas_3D_Node *n; + Evas_3D_Mesh *m; + Eina_Bool pick; + char *name = NULL; + + // Set the focus onto us. + elm_object_focus_set(o, EINA_TRUE); + + evas_object_geometry_get(o, &x, &y, &w, &h); + + obj_x = ev->canvas.x - x; + obj_y = ev->canvas.y - y; + + eo_do(scene->scene, evas_3d_scene_size_get(&scene_w, &scene_h)); + + scene_x = obj_x * scene_w / (Evas_Real)w; + scene_y = obj_y * scene_h / (Evas_Real)h; + + eo_do(scene->scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t)); + if (pick) + { + name = evas_object_data_get(n, "Name"); + printf("Picked : "); + } + else + printf("Not picked : "); + if (NULL == name) + name = ""; + + printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) node(%p) %s mesh(%p)\n", + ev->output.x, ev->output.y, ev->canvas.x, ev->canvas.y, obj_x, obj_y, scene_x, scene_y, s, t, n, name, m); +} + +Scene_Data *scenriAdd(globals *ourGlobals) +{ + Scene_Data *scene; + Evas_Object *obj, *temp; + + scene = calloc(1, sizeof(Scene_Data)); + + // TODO - I have no idea how this should work. + // It seems the people that wrote the examples don't know either. lol +// scene->root_node = eo_add(EVAS_3D_NODE_CLASS, ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); + scene->root_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_NODE); + + scene->scene = eo_add(EVAS_3D_SCENE_CLASS, ourGlobals->evas, + evas_3d_scene_root_node_set(scene->root_node), + evas_3d_scene_size_set(512, 512), + evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0) + ); + + // Add an image object for 3D scene rendering. + obj = eo_add(ELM_OBJ_IMAGE_CLASS, ourGlobals->win, + evas_obj_size_hint_weight_set(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND), + elm_obj_image_fill_outside_set(EINA_TRUE), + evas_obj_visibility_set(EINA_TRUE), + temp = elm_obj_image_object_get() + ); + elm_object_tooltip_text_set(obj, ""); + elm_object_tooltip_hide(obj); + scene->image = obj; + scene->camera_node = cameraAdd(ourGlobals, scene, obj); + + scene->light = eo_add(EVAS_3D_LIGHT_CLASS, ourGlobals->evas, + evas_3d_light_ambient_set(1.0, 1.0, 1.0, 1.0), + evas_3d_light_diffuse_set(1.0, 1.0, 1.0, 1.0), + evas_3d_light_specular_set(1.0, 1.0, 1.0, 1.0), + evas_3d_light_directional_set(EINA_TRUE) + ); + + scene->light_node = evas_3d_node_add(ourGlobals->evas, EVAS_3D_NODE_TYPE_LIGHT); + eo_do(scene->light_node, + evas_3d_node_light_set(scene->light), + evas_3d_node_position_set(1000.0, 0.0, 1000.0), + evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.0, EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0) + ); + + eo_do(scene->root_node, evas_3d_node_member_add(scene->light_node)); + + eo_do(temp, evas_obj_image_scene_set(scene->scene)); + // Elm can't seem to be able to tell us WHERE an image was clicked, so use raw Evas calbacks instead. + evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_MOVE, _on_mouse_move, scene); + evas_object_event_callback_add(temp, EVAS_CALLBACK_MOUSE_DOWN, _on_mouse_down, scene); + + elm_win_resize_object_add(ourGlobals->win, obj); + + return scene; +} + +void scenriDel(globals *ourGlobals) +{ + eo_unref(ourGlobals->scene->image); +} diff --git a/src/extantz/scenri.h b/src/extantz/scenri.h new file mode 100644 index 0000000..1913755 --- /dev/null +++ b/src/extantz/scenri.h @@ -0,0 +1,43 @@ +#ifndef _SCENRI_H_ +#define _SCENRI_H_ + +typedef struct _cameraMove +{ + float x, y, z; + float r, s, t; + float jump; + float JumpSpeed, RotateSpeed, MoveSpeed; +} cameraMove; + +typedef struct _vec4 +{ + float x; + float y; + float z; + float w; +} vec4; + +typedef struct _vec3 +{ + float x; + float y; + float z; +} vec3; + +typedef struct _vec2 +{ + float x; + float y; +} vec2; + +typedef struct _vertex +{ + vec3 position; + vec3 normal; + vec3 tangent; + vec4 color; + vec3 texcoord; +} vertex; + + +#endif -- cgit v1.1