forked from enlightenment/efl
evas: recycling of resources (deleted mine and eagle) in Evas_3D examples.
Summary: Unneccessary resources are deleted. In example of frustum used sweet_home. In example of colorpick used sphere primitive. Possibility to set precision of spheres deletes need in high quality mesh. For spheres used textures of wood and rock, so for good work of colorpick https://phab.enlightenment.org/D2044 should be merged firstly. Reviewers: cedric, raster, Hermet Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D2081 Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
ad17806fb0
commit
ef694f0ed1
|
@ -268,7 +268,7 @@ evas_3d_mmap_LDADD = $(ECORE_EVAS_COMMON_LDADD) @EFL_PTHREAD_LIBS@
|
||||||
evas_3d_mmap_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
evas_3d_mmap_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
||||||
|
|
||||||
EXTRA_PROGRAMS += evas_3d_colorpick
|
EXTRA_PROGRAMS += evas_3d_colorpick
|
||||||
evas_3d_colorpick_SOURCES = evas-3d-colorpick.c
|
evas_3d_colorpick_SOURCES = evas-3d-colorpick.c evas-3d-primitives.c
|
||||||
evas_3d_colorpick_LDADD = $(ECORE_EVAS_COMMON_LDADD) @EFL_PTHREAD_LIBS@
|
evas_3d_colorpick_LDADD = $(ECORE_EVAS_COMMON_LDADD) @EFL_PTHREAD_LIBS@
|
||||||
evas_3d_colorpick_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
evas_3d_colorpick_CPPFLAGS = $(ECORE_EVAS_COMMON_CPPFLAGS)
|
||||||
|
|
||||||
|
@ -331,15 +331,13 @@ resources/images/enlightenment.png \
|
||||||
resources/images/red.png \
|
resources/images/red.png \
|
||||||
resources/images/im1.png \
|
resources/images/im1.png \
|
||||||
resources/images/cube1.png \
|
resources/images/cube1.png \
|
||||||
resources/images/eagle.png \
|
resources/images/bg_space.jpg \
|
||||||
resources/images/M15.png \
|
resources/images/EarthDiffuse.png \
|
||||||
resources/images/M15_1.png \
|
resources/images/moon.png \
|
||||||
resources/images/normal_lego.png \
|
resources/images/normal_lego.png \
|
||||||
resources/images/sonic.png \
|
resources/images/sonic.png \
|
||||||
resources/images/sweet_home_reversed.png \
|
resources/images/sweet_home_reversed.png \
|
||||||
resources/images/star.jpg \
|
resources/models/M15.mtl \
|
||||||
resources/models/eagle.md2 \
|
|
||||||
resources/models/M15.obj \
|
|
||||||
resources/models/mesh_for_mmap.eet \
|
resources/models/mesh_for_mmap.eet \
|
||||||
resources/models/mesh_for_mmap.md2 \
|
resources/models/mesh_for_mmap.md2 \
|
||||||
resources/models/mesh_for_mmap.obj \
|
resources/models/mesh_for_mmap.obj \
|
||||||
|
|
|
@ -5,14 +5,13 @@
|
||||||
* in terminal time response of the found node.
|
* in terminal time response of the found node.
|
||||||
* Use key UP/DOWN for changing z coordinate of camera
|
* Use key UP/DOWN for changing z coordinate of camera
|
||||||
* Use key LEFT/RIGHT for scale each node
|
* Use key LEFT/RIGHT for scale each node
|
||||||
* Use shortcut parameters of commanline: r - rows of objects, c - columns of objects, m - path for model name,
|
* Use shortcut parameters of commanline: r - rows of objects, c - columns of objects,
|
||||||
* f - path for first texture, s - path for second texture.
|
* p - precision of the spheres, f - path for first texture, s - path for second texture.
|
||||||
*
|
*
|
||||||
* @verbatim
|
* @verbatim
|
||||||
* gcc -o evas-3d-colorpick evas-3d-colorpick.c `pkg-config --libs --cflags evas ecore ecore-evas eo eina efl`
|
* gcc -o evas-3d-colorpick evas-3d-colorpick.c evas-3d-primitives.c `pkg-config --libs --cflags evas ecore ecore-evas eo eina efl` -lm
|
||||||
* @endverbatim
|
* @endverbatim
|
||||||
*/
|
*/
|
||||||
//TODO new resources
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -27,6 +26,8 @@
|
||||||
#include <Ecore.h>
|
#include <Ecore.h>
|
||||||
#include <Ecore_Evas.h>
|
#include <Ecore_Evas.h>
|
||||||
#include <Ecore_Getopt.h>
|
#include <Ecore_Getopt.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "evas-3d-primitives.h"
|
||||||
#include "evas-common.h"
|
#include "evas-common.h"
|
||||||
|
|
||||||
#define WIDTH 800
|
#define WIDTH 800
|
||||||
|
@ -34,10 +35,15 @@
|
||||||
|
|
||||||
#define ANIMATION_COUNT 3
|
#define ANIMATION_COUNT 3
|
||||||
#define MAX_PATH 128
|
#define MAX_PATH 128
|
||||||
|
#define INIT_SCALE 7.5
|
||||||
|
#define BIG_SCALE 10.0
|
||||||
|
#define SMALL_SCALE 5.0
|
||||||
|
#define SCALE_UNIT 0.5
|
||||||
|
#define VEC_3(value) value, value, value
|
||||||
|
|
||||||
static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/M15.obj";
|
static const vec2 tex_scale = {1, 1};
|
||||||
static const char *image1_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/M15.png";
|
static const char *image1_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/wood.jpg";
|
||||||
static const char *image2_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/M15_1.png";
|
static const char *image2_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/rocks.jpg";
|
||||||
|
|
||||||
Ecore_Evas *ecore_evas = NULL;
|
Ecore_Evas *ecore_evas = NULL;
|
||||||
Evas *evas = NULL;
|
Evas *evas = NULL;
|
||||||
|
@ -55,16 +61,17 @@ Ecore_Getopt optdesc = {
|
||||||
"Example mesh color pick mechanism",
|
"Example mesh color pick mechanism",
|
||||||
0,
|
0,
|
||||||
{
|
{
|
||||||
ECORE_GETOPT_STORE_INT('r', "row", "Rows of models"),
|
ECORE_GETOPT_STORE_INT('r', "row", "Rows of spheres"),
|
||||||
ECORE_GETOPT_STORE_INT('c', "column", "Columns of models"),
|
ECORE_GETOPT_STORE_INT('c', "column", "Columns of spheres"),
|
||||||
ECORE_GETOPT_STORE_STR('m', "name model", "Name of model"),
|
ECORE_GETOPT_STORE_INT('p', "precision", "Precision of spheres"),
|
||||||
ECORE_GETOPT_STORE_STR('f', "texture1", "Name1 of texture"),
|
ECORE_GETOPT_STORE_STR('f', "texture1", "Name1 of texture"),
|
||||||
ECORE_GETOPT_STORE_STR('s', "texture2", "Name2 of texture"),
|
ECORE_GETOPT_STORE_STR('s', "texture2", "Name2 of texture"),
|
||||||
ECORE_GETOPT_HELP('h', "help"),
|
ECORE_GETOPT_HELP('h', "help"),
|
||||||
ECORE_GETOPT_SENTINEL
|
ECORE_GETOPT_SENTINEL
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
typedef struct _Mine
|
|
||||||
|
typedef struct _Object
|
||||||
{
|
{
|
||||||
Eo *node;
|
Eo *node;
|
||||||
Eo *mesh1;
|
Eo *mesh1;
|
||||||
|
@ -76,11 +83,10 @@ Ecore_Getopt optdesc = {
|
||||||
|
|
||||||
Evas_Real speed;
|
Evas_Real speed;
|
||||||
Ecore_Timer *animate;
|
Ecore_Timer *animate;
|
||||||
Eina_Bool (*m15_init)(void *m15, const char *model,
|
Eina_Bool (*sphere_init)(void *sphere, const char *texture1, const char *texture2);
|
||||||
const char *texture1, const char *texture2);
|
Eina_Bool (*sphere_animate)(void *data);
|
||||||
Eina_Bool (*m15_animate)(void *data);
|
|
||||||
|
|
||||||
} MineM15;
|
} Test_object;
|
||||||
|
|
||||||
typedef struct _Scene
|
typedef struct _Scene
|
||||||
{
|
{
|
||||||
|
@ -93,11 +99,11 @@ typedef struct _Scene
|
||||||
|
|
||||||
int row;
|
int row;
|
||||||
int col;
|
int col;
|
||||||
|
int precision;
|
||||||
|
|
||||||
Eina_List *mines;
|
Eina_List *spheres;
|
||||||
|
|
||||||
Eina_Bool (*scene_init)(const char *model,
|
Eina_Bool (*scene_init)(const char *texture1, const char *texture2);
|
||||||
const char *texture1, const char *texture2);
|
|
||||||
|
|
||||||
} Scene_Data;
|
} Scene_Data;
|
||||||
|
|
||||||
|
@ -107,12 +113,12 @@ static void
|
||||||
_on_delete(Ecore_Evas *ee EINA_UNUSED)
|
_on_delete(Ecore_Evas *ee EINA_UNUSED)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
MineM15 * item;
|
Test_object * item;
|
||||||
EINA_LIST_FOREACH(globalscene.mines, l, item)
|
EINA_LIST_FOREACH(globalscene.spheres, l, item)
|
||||||
{
|
{
|
||||||
free(item);
|
free(item);
|
||||||
}
|
}
|
||||||
eina_list_free(globalscene.mines);
|
eina_list_free(globalscene.spheres);
|
||||||
|
|
||||||
|
|
||||||
ecore_main_loop_quit();
|
ecore_main_loop_quit();
|
||||||
|
@ -128,30 +134,30 @@ _on_canvas_resize(Ecore_Evas *ee)
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_animate_mine1(void *data)
|
_animate_sphere1(void *data)
|
||||||
{
|
{
|
||||||
static int angle = 0.0;
|
static int angle = 0.0;
|
||||||
Eo *n = (Eo*)(((MineM15 *)data)->node);
|
Eo *n = (Eo*)(((Test_object *)data)->node);
|
||||||
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 1.0, 0.0, 1.0));
|
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 1.0, 0.0, 1.0));
|
||||||
angle++;
|
angle++;
|
||||||
if (angle > 360) angle = 0.0;
|
if (angle > 360) angle = 0.0;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_animate_mine2(void *data)
|
_animate_sphere2(void *data)
|
||||||
{
|
{
|
||||||
static int angle = 0.0;
|
static int angle = 0.0;
|
||||||
Eo *n = (Eo*)(((MineM15 *)data)->node);
|
Eo *n = (Eo*)(((Test_object *)data)->node);
|
||||||
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 0.0, 1.0, 1.0));
|
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 0.0, 1.0, 1.0));
|
||||||
angle++;
|
angle++;
|
||||||
if (angle > 360) angle = 0.0;
|
if (angle > 360) angle = 0.0;
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_animate_mine3(void *data)
|
_animate_sphere3(void *data)
|
||||||
{
|
{
|
||||||
static int angle = 0.0;
|
static int angle = 0.0;
|
||||||
Eo *n = (Eo*)(((MineM15 *)data)->node);
|
Eo *n = (Eo*)(((Test_object *)data)->node);
|
||||||
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 1.0, 1.0, 0.0));
|
eo_do(n, evas_3d_node_orientation_angle_axis_set(angle, 1.0, 1.0, 0.0));
|
||||||
angle++;
|
angle++;
|
||||||
if (angle > 360) angle = 0.0;
|
if (angle > 360) angle = 0.0;
|
||||||
|
@ -162,10 +168,10 @@ void _recalculate_position()
|
||||||
{
|
{
|
||||||
int i = 0, j = 0, count = 0;
|
int i = 0, j = 0, count = 0;
|
||||||
Evas_Real x0, y0, z0, x1, y1, z1, shiftx = 0, shifty = 0;
|
Evas_Real x0, y0, z0, x1, y1, z1, shiftx = 0, shifty = 0;
|
||||||
MineM15 *m;
|
Test_object *m;
|
||||||
|
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node, evas_3d_object_update());
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node, evas_3d_object_update());
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node,
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node,
|
||||||
evas_3d_node_bounding_box_get(&x0, &y0, &z0, &x1, &y1, &z1));
|
evas_3d_node_bounding_box_get(&x0, &y0, &z0, &x1, &y1, &z1));
|
||||||
|
|
||||||
for (i = 0; i < globalscene.row; ++i)
|
for (i = 0; i < globalscene.row; ++i)
|
||||||
|
@ -174,7 +180,7 @@ void _recalculate_position()
|
||||||
for(j = 0; j < globalscene.col; ++j)
|
for(j = 0; j < globalscene.col; ++j)
|
||||||
{
|
{
|
||||||
shifty = j * 2 * y1;
|
shifty = j * 2 * y1;
|
||||||
m = (MineM15 *)eina_list_nth(globalscene.mines, count);
|
m = (Test_object *)eina_list_nth(globalscene.spheres, count);
|
||||||
eo_do(m->node, evas_3d_node_position_set(shifty, 0.0, shiftx));
|
eo_do(m->node, evas_3d_node_position_set(shifty, 0.0, shiftx));
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -187,7 +193,7 @@ _on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
|
||||||
Evas_Event_Key_Down *ev = event_info;
|
Evas_Event_Key_Down *ev = event_info;
|
||||||
Evas_Real x, y, z;
|
Evas_Real x, y, z;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
MineM15 * item;
|
Test_object * item;
|
||||||
if (!strcmp(ev->key, "Down"))
|
if (!strcmp(ev->key, "Down"))
|
||||||
{
|
{
|
||||||
eo_do(globalscene.camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
eo_do(globalscene.camera_node, evas_3d_node_position_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
||||||
|
@ -200,21 +206,21 @@ _on_key_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
|
||||||
}
|
}
|
||||||
else if (!strcmp(ev->key, "Left"))
|
else if (!strcmp(ev->key, "Left"))
|
||||||
{
|
{
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node,
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node,
|
||||||
evas_3d_node_scale_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
evas_3d_node_scale_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
||||||
EINA_LIST_FOREACH(globalscene.mines, l, item)
|
EINA_LIST_FOREACH(globalscene.spheres, l, item)
|
||||||
{
|
{
|
||||||
eo_do(item->node, evas_3d_node_scale_set((x - 0.1), (y - 0.1), (z - 0.1)));
|
eo_do(item->node, evas_3d_node_scale_set((x - SCALE_UNIT), (y - SCALE_UNIT), (z - SCALE_UNIT)));
|
||||||
}
|
}
|
||||||
_recalculate_position();
|
_recalculate_position();
|
||||||
}
|
}
|
||||||
else if (!strcmp(ev->key, "Right"))
|
else if (!strcmp(ev->key, "Right"))
|
||||||
{
|
{
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node,
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node,
|
||||||
evas_3d_node_scale_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
evas_3d_node_scale_get(EVAS_3D_SPACE_PARENT, &x, &y, &z));
|
||||||
EINA_LIST_FOREACH(globalscene.mines, l, item)
|
EINA_LIST_FOREACH(globalscene.spheres, l, item)
|
||||||
{
|
{
|
||||||
eo_do(item->node, evas_3d_node_scale_set((x + 0.1), (y + 0.1), (z + 0.1)));
|
eo_do(item->node, evas_3d_node_scale_set((x + SCALE_UNIT), (y + SCALE_UNIT), (z + SCALE_UNIT)));
|
||||||
}
|
}
|
||||||
_recalculate_position();
|
_recalculate_position();
|
||||||
}
|
}
|
||||||
|
@ -243,7 +249,7 @@ _on_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Boom! Time expended for color pick: %2.7f .\n", diff_sec);
|
fprintf(stdout, "Boom! Time expended for color pick: %2.7f .\n", diff_sec);
|
||||||
eo_do(n, evas_3d_node_scale_set(0.5, 0.5, 0.5));
|
eo_do(n, evas_3d_node_scale_set(VEC_3(SMALL_SCALE)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -255,49 +261,50 @@ _on_mouse_down(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *eo EINA
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Boom! Time expended for geometry pick: %2.7f .\n", diff_sec);
|
fprintf(stdout, "Boom! Time expended for geometry pick: %2.7f .\n", diff_sec);
|
||||||
eo_do(n, evas_3d_node_scale_set(1.0, 1.0, 1.0));
|
eo_do(n, evas_3d_node_scale_set(VEC_3(BIG_SCALE)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
_init_m15(void *this, const char *model, const char *texture1,
|
_init_sphere(void *this, const char *texture1, const char *texture2)
|
||||||
const char *texture2)
|
|
||||||
{
|
{
|
||||||
MineM15 *m15 = (MineM15 *)this;
|
Test_object *sphere = (Test_object *)this;
|
||||||
m15->mesh1 = eo_add(EVAS_3D_MESH_CLASS, evas);
|
sphere->mesh1 = eo_add(EVAS_3D_MESH_CLASS, evas);
|
||||||
m15->mesh2 = eo_add(EVAS_3D_MESH_CLASS, evas);
|
sphere->mesh2 = eo_add(EVAS_3D_MESH_CLASS, evas);
|
||||||
m15->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
|
sphere->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
|
||||||
m15->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
|
sphere->material2 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
|
||||||
eo_do(m15->mesh1,
|
|
||||||
efl_file_set(model, NULL),
|
evas_3d_add_sphere_frame(sphere->mesh1, 0, globalscene.precision, tex_scale);
|
||||||
evas_3d_mesh_frame_material_set(0, m15->material1),
|
eo_do(sphere->mesh1,
|
||||||
|
evas_3d_mesh_frame_material_set(0, sphere->material1),
|
||||||
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
|
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
|
||||||
eo_do(m15->mesh2,
|
|
||||||
efl_file_set(model, NULL),
|
evas_3d_add_sphere_frame(sphere->mesh2, 0, globalscene.precision, tex_scale);
|
||||||
evas_3d_mesh_frame_material_set(0, m15->material2),
|
eo_do(sphere->mesh2,
|
||||||
|
evas_3d_mesh_frame_material_set(0, sphere->material2),
|
||||||
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
|
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG));
|
||||||
|
|
||||||
|
|
||||||
eo_do(m15->mesh1, evas_3d_mesh_color_pick_enable_set(EINA_TRUE));
|
eo_do(sphere->mesh1, evas_3d_mesh_color_pick_enable_set(EINA_TRUE));
|
||||||
eo_do(m15->mesh2, evas_3d_mesh_color_pick_enable_set(EINA_TRUE));
|
eo_do(sphere->mesh2, evas_3d_mesh_color_pick_enable_set(EINA_TRUE));
|
||||||
|
|
||||||
m15->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
sphere->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
||||||
eo_do(m15->texture1,
|
eo_do(sphere->texture1,
|
||||||
evas_3d_texture_file_set(texture1, NULL),
|
evas_3d_texture_file_set(texture1, NULL),
|
||||||
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
|
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
|
||||||
EVAS_3D_TEXTURE_FILTER_NEAREST),
|
EVAS_3D_TEXTURE_FILTER_NEAREST),
|
||||||
evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
|
evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
|
||||||
EVAS_3D_WRAP_MODE_REPEAT));
|
EVAS_3D_WRAP_MODE_REPEAT));
|
||||||
m15->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
sphere->texture2 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
||||||
eo_do(m15->texture2,
|
eo_do(sphere->texture2,
|
||||||
evas_3d_texture_file_set(texture2, NULL),
|
evas_3d_texture_file_set(texture2, NULL),
|
||||||
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
|
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST,
|
||||||
EVAS_3D_TEXTURE_FILTER_NEAREST),
|
EVAS_3D_TEXTURE_FILTER_NEAREST),
|
||||||
evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
|
evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT,
|
||||||
EVAS_3D_WRAP_MODE_REPEAT));
|
EVAS_3D_WRAP_MODE_REPEAT));
|
||||||
eo_do(m15->material1,
|
eo_do(sphere->material1,
|
||||||
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, m15->texture1),
|
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, sphere->texture1),
|
||||||
evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
|
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_DIFFUSE, EINA_TRUE),
|
||||||
evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
|
evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
|
||||||
|
@ -309,8 +316,8 @@ _init_m15(void *this, const char *model, const char *texture1,
|
||||||
evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR,
|
evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR,
|
||||||
1.0, 1.0, 1.0, 1.0),
|
1.0, 1.0, 1.0, 1.0),
|
||||||
evas_3d_material_shininess_set(50.0));
|
evas_3d_material_shininess_set(50.0));
|
||||||
eo_do(m15->material2,
|
eo_do(sphere->material2,
|
||||||
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, m15->texture2),
|
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, sphere->texture2),
|
||||||
evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
|
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_DIFFUSE, EINA_TRUE),
|
||||||
evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
|
evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
|
||||||
|
@ -327,16 +334,15 @@ _init_m15(void *this, const char *model, const char *texture1,
|
||||||
|
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
_init_scene(const char *model, const char *texture1,
|
_init_scene(const char *texture1, const char *texture2)
|
||||||
const char *texture2)
|
|
||||||
{
|
{
|
||||||
int i = 0, j = 0, count = 0;
|
int i = 0, j = 0, count = 0;
|
||||||
Evas_Real x0, y0, z0, x1, y1, z1, tmp, shiftx = 0, shifty = 0;
|
Evas_Real x0, y0, z0, x1, y1, z1, tmp, shiftx = 0, shifty = 0;
|
||||||
MineM15 *m;
|
Test_object *m;
|
||||||
|
|
||||||
animate_func[0] = _animate_mine1;
|
animate_func[0] = _animate_sphere1;
|
||||||
animate_func[1] = _animate_mine2;
|
animate_func[1] = _animate_sphere2;
|
||||||
animate_func[2] = _animate_mine3;
|
animate_func[2] = _animate_sphere3;
|
||||||
|
|
||||||
globalscene.scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
|
globalscene.scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
|
||||||
|
|
||||||
|
@ -379,35 +385,36 @@ _init_scene(const char *model, const char *texture1,
|
||||||
tmp = 0.01;
|
tmp = 0.01;
|
||||||
for (i = 0; i < globalscene.col * globalscene.row; i++, j++)
|
for (i = 0; i < globalscene.col * globalscene.row; i++, j++)
|
||||||
{
|
{
|
||||||
MineM15 *m15tmp;
|
Test_object *spheretmp;
|
||||||
m = malloc(sizeof(MineM15));
|
m = malloc(sizeof(Test_object));
|
||||||
m->m15_init = _init_m15;
|
m->sphere_init = _init_sphere;
|
||||||
if (!i)
|
if (!i)
|
||||||
m->m15_init(m, model, texture1, texture2);
|
m->sphere_init(m, texture1, texture2);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m15tmp = (MineM15 *)eina_list_nth(globalscene.mines, 0);
|
spheretmp = (Test_object *)eina_list_nth(globalscene.spheres, 0);
|
||||||
m->mesh1 = m15tmp->mesh1;
|
m->mesh1 = spheretmp->mesh1;
|
||||||
m->mesh2 = m15tmp->mesh2;
|
m->mesh2 = spheretmp->mesh2;
|
||||||
m->material1 = m15tmp->material1;
|
m->material1 = spheretmp->material1;
|
||||||
m->material2 = m15tmp->material2;
|
m->material2 = spheretmp->material2;
|
||||||
m->texture1 = m15tmp->texture1;
|
m->texture1 = spheretmp->texture1;
|
||||||
m->texture2 = m15tmp->texture2;
|
m->texture2 = spheretmp->texture2;
|
||||||
}
|
}
|
||||||
m->node = eo_add(EVAS_3D_NODE_CLASS, evas,
|
m->node = eo_add(EVAS_3D_NODE_CLASS, evas,
|
||||||
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
|
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
|
||||||
m->speed = tmp;
|
m->speed = tmp;
|
||||||
if (j >= ANIMATION_COUNT) j = 0;
|
if (j >= ANIMATION_COUNT) j = 0;
|
||||||
m->m15_animate = animate_func[j];
|
m->sphere_animate = animate_func[j];
|
||||||
m->animate = ecore_timer_add(m->speed, m->m15_animate, m);
|
m->animate = ecore_timer_add(m->speed, m->sphere_animate, m);
|
||||||
eo_do(globalscene.root_node, evas_3d_node_member_add(m->node));
|
eo_do(globalscene.root_node, evas_3d_node_member_add(m->node));
|
||||||
eo_do(m->node, evas_3d_node_mesh_add(m->mesh1));
|
eo_do(m->node, evas_3d_node_mesh_add(m->mesh1),
|
||||||
globalscene.mines = eina_list_append(globalscene.mines, m);
|
evas_3d_node_scale_set(VEC_3(INIT_SCALE)));
|
||||||
|
globalscene.spheres = eina_list_append(globalscene.spheres, m);
|
||||||
tmp += 0.01;
|
tmp += 0.01;
|
||||||
}
|
}
|
||||||
|
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node, evas_3d_object_update());
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node, evas_3d_object_update());
|
||||||
eo_do(((MineM15 *)eina_list_nth(globalscene.mines, 0))->node,
|
eo_do(((Test_object *)eina_list_nth(globalscene.spheres, 0))->node,
|
||||||
evas_3d_node_bounding_box_get(&x0, &y0, &z0, &x1, &y1, &z1));
|
evas_3d_node_bounding_box_get(&x0, &y0, &z0, &x1, &y1, &z1));
|
||||||
|
|
||||||
for (i = 0; i < globalscene.row; ++i)
|
for (i = 0; i < globalscene.row; ++i)
|
||||||
|
@ -416,7 +423,7 @@ _init_scene(const char *model, const char *texture1,
|
||||||
for(j = 0; j < globalscene.col; ++j)
|
for(j = 0; j < globalscene.col; ++j)
|
||||||
{
|
{
|
||||||
shifty = j * 2 * y1;
|
shifty = j * 2 * y1;
|
||||||
m = (MineM15 *)eina_list_nth(globalscene.mines, count);
|
m = (Test_object *)eina_list_nth(globalscene.spheres, count);
|
||||||
eo_do(m->node, evas_3d_node_position_set(shifty, 0.0, shiftx));
|
eo_do(m->node, evas_3d_node_position_set(shifty, 0.0, shiftx));
|
||||||
if (!(i % 2))
|
if (!(i % 2))
|
||||||
{
|
{
|
||||||
|
@ -436,14 +443,14 @@ _init_scene(const char *model, const char *texture1,
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int row = 0, col = 0;
|
int row = 0, col = 0, precision = 0;
|
||||||
char *model = NULL, *texture1 = NULL, *texture2 = NULL;
|
char *texture1 = NULL, *texture2 = NULL;
|
||||||
Eina_Bool r;
|
Eina_Bool r;
|
||||||
|
|
||||||
Ecore_Getopt_Value values[] = {
|
Ecore_Getopt_Value values[] = {
|
||||||
ECORE_GETOPT_VALUE_INT(row),
|
ECORE_GETOPT_VALUE_INT(row),
|
||||||
ECORE_GETOPT_VALUE_INT(col),
|
ECORE_GETOPT_VALUE_INT(col),
|
||||||
ECORE_GETOPT_VALUE_STR(model),
|
ECORE_GETOPT_VALUE_INT(precision),
|
||||||
ECORE_GETOPT_VALUE_STR(texture1),
|
ECORE_GETOPT_VALUE_STR(texture1),
|
||||||
ECORE_GETOPT_VALUE_STR(texture2),
|
ECORE_GETOPT_VALUE_STR(texture2),
|
||||||
ECORE_GETOPT_VALUE_NONE
|
ECORE_GETOPT_VALUE_NONE
|
||||||
|
@ -456,12 +463,12 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (!row) row = 2;
|
if (!row) row = 2;
|
||||||
if (!col) col = 5;
|
if (!col) col = 5;
|
||||||
if (!model) model = (char *)model_path;
|
if (!precision) precision = 30;
|
||||||
if (!texture1) texture1 = (char *)image1_path;
|
if (!texture1) texture1 = (char *)image1_path;
|
||||||
if (!texture2) texture2 = (char *)image2_path;
|
if (!texture2) texture2 = (char *)image2_path;
|
||||||
|
|
||||||
fprintf(stdout, "row - %d, col - %d, model - %s, texture1 - %s, texture2 - %s\n",
|
fprintf(stdout, "row - %d, col - %d, precision of spheres - %d, texture1 - %s, texture2 - %s\n",
|
||||||
row, col, model, texture1, texture2);
|
row, col, precision, texture1, texture2);
|
||||||
|
|
||||||
ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
|
ecore_evas = ecore_evas_new("opengl_x11", 10, 10, WIDTH, HEIGHT, NULL);
|
||||||
|
|
||||||
|
@ -482,7 +489,8 @@ int main(int argc, char **argv)
|
||||||
globalscene.scene_init = _init_scene;
|
globalscene.scene_init = _init_scene;
|
||||||
globalscene.row = row;
|
globalscene.row = row;
|
||||||
globalscene.col = col;
|
globalscene.col = col;
|
||||||
globalscene.scene_init(model, texture1, texture2);
|
globalscene.precision = precision;
|
||||||
|
globalscene.scene_init(texture1, texture2);
|
||||||
|
|
||||||
image = evas_object_image_filled_add(evas);
|
image = evas_object_image_filled_add(evas);
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@
|
||||||
#define WIDTH 800
|
#define WIDTH 800
|
||||||
#define HEIGHT 600
|
#define HEIGHT 600
|
||||||
|
|
||||||
static const char *image_eagle_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/eagle.png";
|
static const char *texture_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sweet_home_reversed.png";
|
||||||
static const char *eagle_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/eagle.md2";
|
static const char *mesh_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sweet_home.obj";
|
||||||
|
|
||||||
typedef struct _Scene_Data
|
typedef struct _Scene_Data
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ typedef struct _Scene_Data
|
||||||
|
|
||||||
Evas *evas;
|
Evas *evas;
|
||||||
Evas_Object *background,*image;
|
Evas_Object *background,*image;
|
||||||
Evas_Real obj_x = 0.0, obj_y = 0.0, obj_z = 0.0, obj_sc_x = 1.0, obj_sc_y = 1.0, obj_sc_z = 1.0;
|
Evas_Real obj_x = 0.0, obj_y = 0.0, obj_z = 0.0, obj_sc_x = 10.0, obj_sc_y = 10.0, obj_sc_z = 10.0;
|
||||||
Evas_Real fleft = -5, fright = 5, fbottom = -5, fup = 5, fnear = 20, ffar = 1000;
|
Evas_Real fleft = -5, fright = 5, fbottom = -5, fup = 5, fnear = 20, ffar = 1000;
|
||||||
Evas_Real radius = 0;
|
Evas_Real radius = 0;
|
||||||
Evas_3D_Frustum_Mode key = EVAS_3D_FRUSTUM_MODE_AABB;
|
Evas_3D_Frustum_Mode key = EVAS_3D_FRUSTUM_MODE_AABB;
|
||||||
|
@ -448,10 +448,7 @@ _mesh_setup(Scene_Data *data)
|
||||||
|
|
||||||
|
|
||||||
data->mesh_node =
|
data->mesh_node =
|
||||||
eo_add(EVAS_3D_NODE_CLASS, evas,
|
eo_add(EVAS_3D_NODE_CLASS, evas, evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
|
||||||
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH),
|
|
||||||
evas_3d_node_position_set(obj_x, obj_y, obj_z),
|
|
||||||
evas_3d_node_scale_set(obj_sc_x, obj_sc_y, obj_sc_z));
|
|
||||||
eo_do(data->root_node, evas_3d_node_member_add(data->mesh_node));
|
eo_do(data->root_node, evas_3d_node_member_add(data->mesh_node));
|
||||||
eo_do(data->mesh_node, evas_3d_node_mesh_add(data->mesh));
|
eo_do(data->mesh_node, evas_3d_node_mesh_add(data->mesh));
|
||||||
}
|
}
|
||||||
|
@ -464,7 +461,7 @@ _mesh_setup_model(Scene_Data *data)
|
||||||
data->texture_model = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
data->texture_model = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
|
||||||
|
|
||||||
eo_do(data->texture_model,
|
eo_do(data->texture_model,
|
||||||
evas_3d_texture_file_set(image_eagle_path, NULL),
|
evas_3d_texture_file_set(texture_path, NULL),
|
||||||
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST),
|
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));
|
evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, EVAS_3D_WRAP_MODE_REPEAT));
|
||||||
|
|
||||||
|
@ -481,7 +478,7 @@ _mesh_setup_model(Scene_Data *data)
|
||||||
evas_3d_material_shininess_set(100.0));
|
evas_3d_material_shininess_set(100.0));
|
||||||
|
|
||||||
eo_do(data->mesh_model,
|
eo_do(data->mesh_model,
|
||||||
efl_file_set(eagle_path, NULL),
|
efl_file_set(mesh_path, NULL),
|
||||||
evas_3d_mesh_frame_material_set(0, data->material_model),
|
evas_3d_mesh_frame_material_set(0, data->material_model),
|
||||||
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE));
|
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE));
|
||||||
}
|
}
|
||||||
|
@ -502,6 +499,7 @@ _scene_setup(Scene_Data *data)
|
||||||
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
|
evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH));
|
||||||
eo_do(data->mesh_node_model,
|
eo_do(data->mesh_node_model,
|
||||||
evas_3d_node_position_set(obj_x, obj_y, obj_z),
|
evas_3d_node_position_set(obj_x, obj_y, obj_z),
|
||||||
|
evas_3d_node_orientation_angle_axis_set(-90, 1.0, 0.0, 0.0),
|
||||||
evas_3d_node_scale_set(obj_sc_x, obj_sc_y, obj_sc_z));
|
evas_3d_node_scale_set(obj_sc_x, obj_sc_y, obj_sc_z));
|
||||||
eo_do(data->root_node, evas_3d_node_member_add(data->mesh_node_model));
|
eo_do(data->root_node, evas_3d_node_member_add(data->mesh_node_model));
|
||||||
eo_do(data->mesh_node_model, evas_3d_node_mesh_add(data->mesh_model));
|
eo_do(data->mesh_node_model, evas_3d_node_mesh_add(data->mesh_model));
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 99 KiB |
Binary file not shown.
Before Width: | Height: | Size: 144 KiB |
Binary file not shown.
Before Width: | Height: | Size: 117 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
Reference in New Issue