diff --git a/src/examples/evas/Obj_fixes/example_to_explain_fixes.c b/src/examples/evas/Obj_fixes/example_to_explain_fixes.c new file mode 100644 index 0000000000..e07ff287a1 --- /dev/null +++ b/src/examples/evas/Obj_fixes/example_to_explain_fixes.c @@ -0,0 +1,197 @@ +/** +* Temporary example to explain what changed in obj. +* +* @verbatim +* gcc -o example_to_explain_fixes example_to_explain_fixes.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo` +* @endverbatim +*/ + +#define EFL_EO_API_SUPPORT +#define EFL_BETA_API_SUPPORT + +#include +#include +#include +#include + +#define WIDTH 1900 +#define HEIGHT 1080 + +Ecore_Evas *ecore_evas = NULL; +Evas *evas = NULL; +Eo *background = NULL; +Eo *image = NULL; + +Eo *scene = NULL; +Eo *root_node = NULL; +Eo *camera_node = NULL; +Eo *light_node = NULL; +Eo *camera = NULL; +Eo *mesh_node = NULL; +Eo *mesh = NULL; +Eo *material = NULL; +Eo *texture = NULL; +Eo *light = NULL; + +static float angle = 0; + +static Eina_Bool +_animate_scene(void *data) +{ + angle += 0.5; + + eo_do((Evas_3D_Node *)data, evas_3d_node_orientation_angle_axis_set(angle, 1.0, 1.0, -1.0)); + + /* Rotate */ + if (angle > 360.0) angle -= 360.0f; + + return EINA_TRUE; +} + +static void +_on_delete(Ecore_Evas *ee EINA_UNUSED) +{ + ecore_main_loop_quit(); +} + +static void +_on_canvas_resize(Ecore_Evas *ee) +{ + int w, h; + + ecore_evas_geometry_get(ee, NULL, NULL, &w, &h); + eo_do(background, evas_obj_size_set(w, h)); + eo_do(image, evas_obj_size_set(w, h)); +} + +int +main(void) +{ + //Unless Evas 3D supports Software renderer, we set gl backened forcely. + setenv("ECORE_EVAS_ENGINE", "opengl_x11", 1); + + if (!ecore_evas_init()) return 0; + + ecore_evas = ecore_evas_new(NULL, 10, 10, WIDTH, HEIGHT, NULL); + + if (!ecore_evas) return 0; + + ecore_evas_callback_delete_request_set(ecore_evas, _on_delete); + ecore_evas_callback_resize_set(ecore_evas, _on_canvas_resize); + ecore_evas_show(ecore_evas); + + evas = ecore_evas_get(ecore_evas); + + /* Add a scene object .*/ + scene = eo_add(EVAS_3D_SCENE_CLASS, evas); + + /* Add the root node for the scene. */ + root_node = eo_add(EVAS_3D_NODE_CLASS, evas, + evas_3d_node_constructor(EVAS_3D_NODE_TYPE_NODE)); + + /* Add the camera. */ + camera = eo_add(EVAS_3D_CAMERA_CLASS, evas); + eo_do(camera, + evas_3d_camera_projection_perspective_set(60.0, 1.0, 1.0, 500.0)); + + camera_node = + eo_add(EVAS_3D_NODE_CLASS, evas, + evas_3d_node_constructor(EVAS_3D_NODE_TYPE_CAMERA)); + eo_do(camera_node, + evas_3d_node_camera_set(camera)); + eo_do(root_node, + evas_3d_node_member_add(camera_node)); + eo_do(camera_node, + evas_3d_node_position_set(10.0, 0.0, 2.0), + evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 2.0, + EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0)); + /* Add the light. */ + light = eo_add(EVAS_3D_LIGHT_CLASS, evas); + eo_do(light, + 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)); + + light_node = + eo_add(EVAS_3D_NODE_CLASS, evas, + evas_3d_node_constructor(EVAS_3D_NODE_TYPE_LIGHT)); + eo_do(light_node, + evas_3d_node_light_set(light), + evas_3d_node_position_set(10.0, 0.0, 2.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(root_node, + evas_3d_node_member_add(light_node)); + + /* Add the mesh. */ + mesh = eo_add(EVAS_3D_MESH_CLASS, evas); + material = eo_add(EVAS_3D_MATERIAL_CLASS, evas); + + eo_do(mesh, + efl_file_set("sweet_home.obj", NULL), + evas_3d_mesh_frame_material_set(0, material), + evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG)); + + texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas); + eo_do(texture, + evas_3d_texture_file_set("sweet_home_temp.png", NULL), + evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, + EVAS_3D_TEXTURE_FILTER_NEAREST), + evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, + EVAS_3D_WRAP_MODE_REPEAT)); + eo_do(material, + evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, texture), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE), + evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, + 0.01, 0.01, 0.01, 1.0), + evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, + 1.0, 1.0, 1.0, 1.0), + evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, + 1.0, 1.0, 1.0, 1.0), + evas_3d_material_shininess_set(50.0)); + + eo_do(mesh, efl_file_save("saved_home.obj", NULL, NULL)); + + mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas, + evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH)); + eo_do(root_node, + evas_3d_node_member_add(mesh_node)); + eo_do(mesh_node, + evas_3d_node_mesh_add(mesh)); + + /* Set up scene. */ + eo_do(scene, + evas_3d_scene_root_node_set(root_node), + evas_3d_scene_camera_node_set(camera_node), + evas_3d_scene_size_set(WIDTH, HEIGHT)); + + /* Add a background rectangle objects. */ + background = eo_add(EVAS_RECTANGLE_CLASS, evas); + eo_do(background, + evas_obj_color_set(0, 0, 0, 255), + evas_obj_size_set(WIDTH, HEIGHT), + evas_obj_visibility_set(EINA_TRUE)); + + /* Add an image object for 3D scene rendering. */ + image = evas_object_image_filled_add(evas); + eo_do(image, + evas_obj_size_set(WIDTH, HEIGHT), + evas_obj_visibility_set(EINA_TRUE)); + + /* Set the image object as render target for 3D scene. */ + eo_do(image, evas_obj_image_scene_set(scene)); + + ecore_timer_add(0.01, _animate_scene, mesh_node); + + /* Enter main loop. */ + ecore_main_loop_begin(); + + ecore_evas_free(ecore_evas); + ecore_evas_shutdown(); + + return 0; +} diff --git a/src/examples/evas/Obj_fixes/sweet_home.mtl b/src/examples/evas/Obj_fixes/sweet_home.mtl new file mode 100644 index 0000000000..c3342d4c8b --- /dev/null +++ b/src/examples/evas/Obj_fixes/sweet_home.mtl @@ -0,0 +1,22 @@ +# Blender MTL File: 'sweet_home.blend' +# Material Count: 2 + +newmtl Material +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd /home/bdevichev/Desktop/rect.png + +newmtl Material_Untitled +Ns 96.078431 +Ka 0.000000 0.000000 0.000000 +Kd 0.640000 0.640000 0.640000 +Ks 0.500000 0.500000 0.500000 +Ni 1.000000 +d 1.000000 +illum 2 +map_Kd /home/bdevichev/Desktop/sweet_home.png diff --git a/src/examples/evas/Obj_fixes/sweet_home.obj b/src/examples/evas/Obj_fixes/sweet_home.obj new file mode 100644 index 0000000000..a98175f125 --- /dev/null +++ b/src/examples/evas/Obj_fixes/sweet_home.obj @@ -0,0 +1,111 @@ +# Blender v2.69 (sub 0) OBJ File: 'sweet_home.blend' +# www.blender.org +mtllib sweet_home.mtl +o Cube +v 1.000003 -0.999997 0.000002 +v -0.999997 -1.000003 0.000002 +v -1.000002 0.999998 0.000002 +v 0.999998 1.000002 0.000002 +v 1.000002 -0.999998 2.000002 +v -0.999998 -1.000002 2.000002 +v -1.000002 0.999998 2.000002 +v 0.999997 1.000003 2.000002 +v 0.000002 -1.000000 3.075149 +v -0.000002 1.000000 3.075149 +v 0.666668 -0.644449 2.358384 +v 0.333335 -0.644450 2.716766 +v 0.666667 -0.293067 2.358384 +v 0.333334 -0.293068 2.716766 +v 0.662209 -0.629904 2.991038 +v 0.337794 -0.629904 2.980731 +v 0.662208 -0.307612 2.991038 +v 0.337793 -0.307613 2.980731 +vt 0.013689 0.608350 +vt 0.285640 0.608350 +vt 0.285640 0.978776 +vt 0.013689 0.978776 +vt 0.564957 0.983606 +vt 0.293719 0.983606 +vt 0.293719 0.613180 +vt 0.564957 0.613180 +vt 0.646856 0.021326 +vt 0.083404 0.021326 +vt 0.083369 0.584801 +vt 0.646820 0.584801 +vt 0.949735 0.303064 +vt 0.654355 0.022016 +vt 0.957234 0.303753 +vt 0.654320 0.585490 +vt 0.090869 0.585491 +vt 0.090904 0.022016 +vt 0.820337 0.692442 +vt 0.820337 0.803140 +vt 0.740863 0.803140 +vt 0.740863 0.692442 +vt 0.695284 0.903159 +vt 0.695284 0.830265 +vt 0.768687 0.830265 +vt 0.768687 0.903159 +vt 0.874667 0.789013 +vt 0.874667 0.893367 +vt 0.979009 0.893367 +vt 0.979009 0.789013 +vt 0.567834 0.981515 +vt 0.567834 0.611089 +vt 0.768686 0.903159 +vt 0.768687 0.823686 +vt 0.811715 0.826975 +vt 0.811715 0.899870 +vt 0.591196 0.903159 +vt 0.591196 0.823686 +vt 0.695284 0.826975 +vt 0.695284 0.899870 +vt 0.666035 0.721564 +vt 0.667476 0.661838 +vt 0.740863 0.660019 +vt 0.591196 0.741571 +vt 0.666035 0.660015 +vt 0.666035 0.803140 +vt 0.592658 0.801339 +vt 0.013481 0.981515 +vt 0.104078 0.915663 +vt 0.194676 0.915663 +vt 0.285274 0.981515 +vt 0.194676 0.850582 +vt 0.285274 0.611089 +vt 0.104078 0.850582 +vt 0.013481 0.611089 +vn -0.732233 -0.000002 0.681054 +vn 1.000000 0.000002 0.000000 +vn 0.000002 -1.000000 0.000000 +vn -0.000002 1.000000 -0.000000 +vn -0.732233 -0.000001 -0.681054 +vn -0.031755 -0.000000 0.999496 +vn -0.000000 0.000000 -1.000000 +vn -1.000000 -0.000002 -0.000000 +vn -0.999857 -0.000002 0.016891 +vn 0.999975 0.000002 0.007049 +vn 0.017155 0.999327 0.032422 +vn 0.017160 -0.999327 0.032422 +vn 0.732233 0.000001 0.681054 +vn 0.732233 0.000002 0.681054 +vn 0.732234 0.000002 0.681053 +usemtl Material +s off +f 6/1/1 9/2/1 10/3/1 7/4/1 +usemtl Material_Untitled +f 4/5/2 8/6/2 5/7/2 1/8/2 +f 6/9/3 2/10/3 1/11/3 5/12/3 9/13/3 +f 7/14/4 10/15/4 8/16/4 4/17/4 3/18/4 +f 11/19/5 12/20/5 14/21/5 13/22/5 +f 15/23/6 17/24/6 18/25/6 16/26/6 +f 2/27/7 3/28/7 4/29/7 1/30/7 +f 6/2/8 7/3/8 3/31/8 2/32/8 +f 14/33/9 12/34/9 16/35/9 18/36/9 +f 11/37/10 13/38/10 17/39/10 15/40/10 +f 13/21/11 14/41/11 18/42/11 17/43/11 +f 12/44/12 11/45/12 15/46/12 16/47/12 +f 5/48/13 11/49/13 12/50/13 9/51/13 +f 9/51/14 12/50/14 14/52/14 10/53/14 +f 13/54/14 8/55/14 10/53/14 14/52/14 +f 11/49/15 5/48/15 8/55/15 13/54/15 diff --git a/src/examples/evas/Obj_fixes/sweet_home_temp.png b/src/examples/evas/Obj_fixes/sweet_home_temp.png new file mode 100644 index 0000000000..1e79861dd4 Binary files /dev/null and b/src/examples/evas/Obj_fixes/sweet_home_temp.png differ