evas: fix Evas_3D examples to use Eo API.

This commit is contained in:
Cedric Bail 2014-05-01 11:01:56 +02:00
parent 756fce31dc
commit 53260b8037
4 changed files with 210 additions and 202 deletions

View File

@ -126,20 +126,20 @@ static void
_camera_setup(Scene_Data *data) _camera_setup(Scene_Data *data)
{ {
data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas); data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
eo_do(data->camera, eo_do(data->camera,
evas_3d_camera_projection_perspective_set(60.0, 1.0, 2.0, 50.0)); evas_3d_camera_projection_perspective_set(60.0, 1.0, 2.0, 50.0));
// data->camera_node = // data->camera_node =
// eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_CAMERA); // eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_CAMERA);
data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA); data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA);
eo_do(data->camera_node, eo_do(data->camera_node,
evas_3d_node_camera_set(data->camera)); evas_3d_node_camera_set(data->camera),
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
eo_do(data->camera_node,
evas_3d_node_position_set(0.0, 0.0, 10.0), evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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)); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->camera_node));
} }
static void static void
@ -154,29 +154,26 @@ _light_setup(Scene_Data *data)
// data->light_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_LIGHT); // data->light_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_LIGHT);
data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT); data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT);
eo_do(data->light_node, eo_do(data->light_node,
evas_3d_node_light_set(data->light)); evas_3d_node_light_set(data->light),
eo_do(data->root_node,
evas_3d_node_member_add(data->light_node));
eo_do(data->light_node,
evas_3d_node_position_set(0.0, 0.0, 10.0), evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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)); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
} }
static void static void
_mesh_setup(Scene_Data *data) _mesh_setup(Scene_Data *data)
{ {
/* Setup material. */ /* Setup material. */
data->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas); data->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material, eo_do(data->material,
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),
evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT,
0.2, 0.2, 0.2, 1.0), evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
0.8, 0.8, 0.8, 1.0), evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 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(100.0)); evas_3d_material_shininess_set(100.0));
/* Setup mesh. */ /* Setup mesh. */
@ -184,37 +181,35 @@ _mesh_setup(Scene_Data *data)
eo_do(data->mesh, eo_do(data->mesh,
evas_3d_mesh_vertex_count_set(24), evas_3d_mesh_vertex_count_set(24),
evas_3d_mesh_frame_add(0), evas_3d_mesh_frame_add(0),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[ 0]),
&cube_vertices[0]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[ 3]),
&cube_vertices[3]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[ 6]),
&cube_vertices[6]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[10]),
&cube_vertices[10]),
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]), 36, &cube_indices[0]),
evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES), evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG), evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG),
evas_3d_mesh_frame_material_set(0, data->material)); evas_3d_mesh_frame_material_set(0, data->material));
// data->mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_MESH);
data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH); data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH);
eo_do(data->root_node, eo_do(data->root_node, evas_3d_node_member_add(data->mesh_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));
} }
static void static void
_scene_setup(Scene_Data *data) _scene_setup(Scene_Data *data)
{ {
data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas); data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
eo_do(data->scene, evas_3d_scene_size_set(WIDTH, HEIGHT), eo_do(data->scene,
evas_3d_scene_size_set(WIDTH, HEIGHT);
evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0)); evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0));
// data->root_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_NODE); // data->root_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_NODE);

View File

@ -163,13 +163,12 @@ _camera_setup(Scene_Data *data)
// eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_CAMERA); // eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_CAMERA);
data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA); data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA);
eo_do(data->camera_node, eo_do(data->camera_node,
evas_3d_node_camera_set(data->camera)); evas_3d_node_camera_set(data->camera),
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
eo_do(data->camera_node,
evas_3d_node_position_set(0.0, 0.0, 10.0), evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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)); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
} }
static void static void
@ -184,13 +183,11 @@ _light_setup(Scene_Data *data)
// data->light_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_LIGHT); // data->light_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_LIGHT);
data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT); data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT);
eo_do(data->light_node, eo_do(data->light_node,
evas_3d_node_light_set(data->light)); evas_3d_node_light_set(data->light),
eo_do(data->root_node,
evas_3d_node_member_add(data->light_node));
eo_do(data->light_node,
evas_3d_node_position_set(0.0, 0.0, 10.0), evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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)); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
} }
static void static void
@ -198,92 +195,86 @@ _mesh_setup(Scene_Data *data)
{ {
/* Setup material. */ /* Setup material. */
data->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, evas); data->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
data->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material0, eo_do(data->material0,
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),
evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE),
0.2, 0.2, 0.2, 1.0),
evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
0.8, 0.8, 0.8, 1.0), evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
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(100.0)); evas_3d_material_shininess_set(100.0));
data->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material1, eo_do(data->material1,
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),
evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE); evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE),
evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT,
0.2, 0.2, 0.2, 1.0), evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
0.8, 0.8, 0.8, 1.0), evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 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(100.0)); evas_3d_material_shininess_set(100.0));
/* Texture 1 */
data->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, evas); data->texture0 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
eo_do(data->texture0, evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA,
EVAS_3D_PIXEL_FORMAT_8888, 4,
4, &pixels0[0]));
eo_do(data->material0, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE,
data->texture0));
/* Texture 2 */
data->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, evas); data->texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
eo_do(data->texture1, evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA,
EVAS_3D_PIXEL_FORMAT_8888, 4,
4, &pixels1[0]));
eo_do(data->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE,
data->texture1));
/* Normal texture */
data->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, evas); data->texture_normal = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
eo_do(data->texture_normal, evas_3d_texture_file_set("normal_lego.png", eo_do(data->texture0,
NULL)); evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA,
EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels0[0]));
eo_do(data->texture1,
evas_3d_texture_data_set(EVAS_3D_COLOR_FORMAT_RGBA,
EVAS_3D_PIXEL_FORMAT_8888, 4, 4, &pixels1[0]));
eo_do(data->texture_normal, evas_3d_texture_file_set("normal_lego.png", NULL));
eo_do(data->material0,
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, data->texture0));
eo_do(data->material1,
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, data->texture1));
eo_do(data->material1,
evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, data->texture_normal));
eo_do(data->material1, evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL,
data->texture_normal));
/* Setup mesh. */ /* Setup mesh. */
data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas); data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh, eo_do(data->mesh,
evas_3d_mesh_vertex_count_set(24), evas_3d_mesh_vertex_count_set(24),
evas_3d_mesh_frame_add(0), evas_3d_mesh_frame_add(0),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[0]),
&cube_vertices[0]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[3]),
&cube_vertices[3]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[6]),
&cube_vertices[6]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float), 12 * sizeof(float), &cube_vertices[10]),
&cube_vertices[10]),
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]), 36, &cube_indices[0]),
evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES), evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES),
evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_NORMAL_MAP), evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_NORMAL_MAP),
evas_3d_mesh_frame_material_set(0, data->material0), evas_3d_mesh_frame_material_set(0, data->material0),
evas_3d_mesh_frame_add(20), evas_3d_mesh_frame_add(20),
evas_3d_mesh_frame_material_set(20, data->material1)); evas_3d_mesh_frame_material_set(20, data->material1));
// data->mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_MESH);
data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH); data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH);
eo_do(data->root_node, eo_do(data->root_node, evas_3d_node_member_add(data->mesh_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));
} }
static void static void
_scene_setup(Scene_Data *data) _scene_setup(Scene_Data *data)
{ {
data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas); data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
eo_do(data->scene, evas_3d_scene_size_set(WIDTH, HEIGHT), eo_do(data->scene,
evas_3d_scene_size_set(WIDTH, HEIGHT),
evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0)); evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0));
// data->root_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_NODE); // data->root_node = eo_add(EVAS_3D_NODE_CLASS, evas, EVAS_3D_NODE_TYPE_NODE);

View File

@ -1,3 +1,5 @@
#define EFL_EO_API_SUPPORT
#define EFL_BETA_API_SUPPORT
#include <Ecore.h> #include <Ecore.h>
#include <Ecore_Evas.h> #include <Ecore_Evas.h>
#include <stdio.h> #include <stdio.h>
@ -28,7 +30,8 @@ _animate_scene(void *data)
angle += 0.3; angle += 0.3;
evas_3d_node_orientation_angle_axis_set((Evas_3D_Node *)data, angle, 0.0, 1.0, 0.0); eo_do((Evas_3D_Node *)data,
evas_3d_node_orientation_angle_axis_set(angle, 0.0, 1.0, 0.0));
/* Rotate */ /* Rotate */
if (angle > 360.0) if (angle > 360.0)
@ -254,37 +257,39 @@ _on_mouse_down(void *data EINA_UNUSED,
Evas_Object *o, Evas_Object *o,
void *einfo) void *einfo)
{ {
Evas_Event_Mouse_Down *ev = einfo; Evas_Event_Mouse_Down *ev = einfo;
Evas_Coord x, y, w, h; Evas_Coord x, y, w, h;
Evas_Coord obj_x, obj_y; Evas_Coord obj_x, obj_y;
int scene_w, scene_h; int scene_w, scene_h;
Evas_Real scene_x, scene_y; Evas_Real scene_x, scene_y;
Evas_Real s, t; Evas_Real s, t;
Evas_3D_Node *n; Evas_3D_Node *n;
Evas_3D_Mesh *m; Evas_3D_Mesh *m;
Eina_Bool pick;
evas_object_geometry_get(o, &x, &y, &w, &h); evas_object_geometry_get(o, &x, &y, &w, &h);
obj_x = ev->canvas.x - x; obj_x = ev->canvas.x - x;
obj_y = ev->canvas.y - y; obj_y = ev->canvas.y - y;
evas_3d_scene_size_get(scene, &scene_w, &scene_h); eo_do(scene, evas_3d_scene_size_get(&scene_w, &scene_h));
scene_x = obj_x * scene_w / (Evas_Real)w; scene_x = obj_x * scene_w / (Evas_Real)w;
scene_y = obj_y * scene_h / (Evas_Real)h; scene_y = obj_y * scene_h / (Evas_Real)h;
if (evas_3d_scene_pick(scene, scene_x, scene_y, &n, &m, &s, &t)) eo_do(scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t));
printf("Picked : "); if (pick)
else printf("Picked : ");
printf("Not picked : "); else
printf("Not picked : ");
printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) " printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) "
"node(%p) mesh(%p)\n", "node(%p) mesh(%p)\n",
ev->output.x, ev->output.y, ev->output.x, ev->output.y,
ev->canvas.x, ev->canvas.y, ev->canvas.x, ev->canvas.y,
obj_x, obj_y, obj_x, obj_y,
scene_x, scene_y, scene_x, scene_y,
s, t, n, m); s, t, n, m);
} }
int int
@ -305,69 +310,73 @@ main(void)
evas = ecore_evas_get(ecore_evas); evas = ecore_evas_get(ecore_evas);
/* Add a scene object .*/ /* Add a scene object .*/
scene = evas_3d_scene_add(evas); scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
/* Add the root node for the scene. */ /* Add the root node for the scene. */
root_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_NODE); root_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_NODE);
/* Add the camera. */ /* Add the camera. */
camera = evas_3d_camera_add(evas); camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
evas_3d_camera_projection_perspective_set(camera, 30.0, 1.0, 1.0, 100.0); eo_do(camera, evas_3d_camera_projection_perspective_set(30.0, 1.0, 1.0, 100.0));
camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA); camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA);
evas_3d_node_camera_set(camera_node, camera); eo_do(camera_node,
evas_3d_node_member_add(root_node, camera_node); evas_3d_node_camera_set(camera);
evas_3d_node_position_set(camera_node, 0.0, 0.0, 5.0); evas_3d_node_position_set(0.0, 0.0, 5.0);
evas_3d_node_look_at_set(camera_node, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(root_node, evas_3d_node_member_add(camera_node));
/* Add the cube mesh. */ /* Add the cube mesh. */
_sphere_init(100); _sphere_init(100);
mesh = evas_3d_mesh_add(evas); mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
evas_3d_mesh_vertex_count_set(mesh, vertex_count); eo_do(mesh,
evas_3d_mesh_frame_add(mesh, 0); evas_3d_mesh_vertex_count_set(vertex_count),
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_POSITION, evas_3d_mesh_frame_add(0),
sizeof(vertex), &vertices[0].position); evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_NORMAL, sizeof(vertex), &vertices[0].position),
sizeof(vertex), &vertices[0].normal); evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_TANGENT, sizeof(vertex), &vertices[0].normal),
sizeof(vertex), &vertices[0].tangent); evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT,
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_COLOR, sizeof(vertex), &vertices[0].tangent),
sizeof(vertex), &vertices[0].color); evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_TEXCOORD, sizeof(vertex), &vertices[0].color),
sizeof(vertex), &vertices[0].texcoord); evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD,
sizeof(vertex), &vertices[0].texcoord),
evas_3d_mesh_index_data_set(mesh, EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0]); evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0]),
evas_3d_mesh_vertex_assembly_set(mesh, EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES); evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES));
material = evas_3d_material_add(evas); material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
evas_3d_mesh_frame_material_set(mesh, 0, material); eo_do(mesh, evas_3d_mesh_frame_material_set(0, material));
texture_diffuse = evas_3d_texture_add(evas); texture_diffuse = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
eo_do(texture_diffuse,
evas_3d_texture_file_set("EarthDiffuse.png", NULL),
evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR));
eo_do(material,
evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, texture_diffuse),
evas_3d_texture_file_set(texture_diffuse, "EarthDiffuse.png", NULL); evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
evas_3d_texture_filter_set(texture_diffuse, EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR); evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE),
evas_3d_material_texture_set(material, EVAS_3D_MATERIAL_DIFFUSE, texture_diffuse); evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE),
evas_3d_material_enable_set(material, EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE); evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0),
evas_3d_material_enable_set(material, EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE); evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0),
evas_3d_material_enable_set(material, EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE); evas_3d_material_color_set(EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0),
evas_3d_material_shininess_set(50.0));
evas_3d_material_color_set(material, EVAS_3D_MATERIAL_AMBIENT, 0.01, 0.01, 0.01, 1.0);
evas_3d_material_color_set(material, EVAS_3D_MATERIAL_DIFFUSE, 1.0, 1.0, 1.0, 1.0);
evas_3d_material_color_set(material, EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0);
evas_3d_material_shininess_set(material, 50.0);
mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH); mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH);
evas_3d_node_member_add(root_node, mesh_node); eo_do(root_node, evas_3d_node_member_add(mesh_node));
evas_3d_node_mesh_add(mesh_node, mesh); eo_do(mesh_node, evas_3d_node_mesh_add(mesh));
evas_3d_mesh_shade_mode_set(mesh, EVAS_3D_SHADE_MODE_DIFFUSE); eo_do(mesh, evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE));
/* Set up scene. */ /* Set up scene. */
evas_3d_scene_root_node_set(scene, root_node); eo_do(scene,
evas_3d_scene_camera_node_set(scene, camera_node); evas_3d_scene_root_node_set(root_node),
evas_3d_scene_size_set(scene, WIDTH, HEIGHT); evas_3d_scene_camera_node_set(camera_node),
evas_3d_scene_size_set(WIDTH, HEIGHT));
/* Add evas objects. */ /* Add evas objects. */
background = evas_object_rectangle_add(evas); background = evas_object_rectangle_add(evas);

View File

@ -1,3 +1,5 @@
#define EFL_EO_API_SUPPORT
#define EFL_BETA_API_SUPPORT
#include <Ecore.h> #include <Ecore.h>
#include <Ecore_Evas.h> #include <Ecore_Evas.h>
#include <stdio.h> #include <stdio.h>
@ -119,7 +121,8 @@ _animate_scene(void *data)
angle += 0.5; angle += 0.5;
evas_3d_node_orientation_angle_axis_set(scene->mesh_node, angle, 1.0, 1.0, 1.0); eo_do(scene->mesh_node,
evas_3d_node_orientation_angle_axis_set(angle, 1.0, 1.0, 1.0));
/* Rotate */ /* Rotate */
if (angle > 360.0) if (angle > 360.0)
@ -147,87 +150,96 @@ _animate_scene(void *data)
static void static void
_camera_setup(Scene_Data *data) _camera_setup(Scene_Data *data)
{ {
data->camera = evas_3d_camera_add(evas); data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
evas_3d_camera_projection_perspective_set(data->camera, 30.0, 1.0, 2.0, 50.0); eo_do(data->camera,
evas_3d_camera_projection_perspective_set(30.0, 1.0, 2.0, 50.0));
data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA); data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA);
evas_3d_node_camera_set(data->camera_node, data->camera); eo_do(data->camera_node,
evas_3d_node_member_add(data->root_node, data->camera_node); evas_3d_node_camera_set(data->camera),
evas_3d_node_position_set(data->camera_node, 0.0, 0.0, 10.0); evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(data->camera_node, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
} }
static void static void
_light_setup(Scene_Data *data) _light_setup(Scene_Data *data)
{ {
data->light = evas_3d_light_add(evas); data->light = eo_add(EVAS_3D_LIGHT_CLASS, evas);
evas_3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0); eo_do(data->light,
evas_3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0); evas_3d_light_ambient_set(0.2, 0.2, 0.2, 1.0),
evas_3d_light_specular_set(data->light, 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));
data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT); data->light_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT);
evas_3d_node_light_set(data->light_node, data->light); eo_do(data->light_node,
evas_3d_node_member_add(data->root_node, data->light_node); evas_3d_node_light_set(data->light),
evas_3d_node_position_set(data->light_node, 0.0, 0.0, 10.0); evas_3d_node_position_set(0.0, 0.0, 10.0),
evas_3d_node_look_at_set(data->light_node, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 0.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); EVAS_3D_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
} }
static void static void
_mesh_setup(Scene_Data *data) _mesh_setup(Scene_Data *data)
{ {
/* Setup material. */ /* Setup material. */
data->material = evas_3d_material_add(evas); data->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
data->texture = evas_3d_texture_add(evas); data->texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
evas_3d_texture_source_set(data->texture, source); eo_do(data->texture,
evas_3d_texture_source_visible_set(data->texture, EINA_TRUE); evas_3d_texture_source_set(source),
evas_3d_texture_source_visible_set(EINA_TRUE));
evas_3d_material_enable_set(data->material, EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE); eo_do(data->material,
evas_3d_material_enable_set(data->material, EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE); evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE),
evas_3d_material_enable_set(data->material, EVAS_3D_MATERIAL_SPECULAR, 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_color_set(data->material, EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0); evas_3d_material_color_set(EVAS_3D_MATERIAL_AMBIENT, 0.2, 0.2, 0.2, 1.0),
evas_3d_material_color_set(data->material, EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0); evas_3d_material_color_set(EVAS_3D_MATERIAL_DIFFUSE, 0.8, 0.8, 0.8, 1.0),
evas_3d_material_color_set(data->material, EVAS_3D_MATERIAL_SPECULAR, 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(data->material, 100.0); evas_3d_material_shininess_set(100.0),
evas_3d_material_texture_set(data->material, EVAS_3D_MATERIAL_DIFFUSE, data->texture); evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, data->texture));
/* Setup mesh. */ /* Setup mesh. */
data->mesh = evas_3d_mesh_add(evas); data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
evas_3d_mesh_vertex_count_set(data->mesh, 24); eo_do(data->mesh,
evas_3d_mesh_frame_add(data->mesh, 0); evas_3d_mesh_vertex_count_set(24),
evas_3d_mesh_frame_add(0),
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_POSITION, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
12 * sizeof(float), &cube_vertices[ 0]); 12 * sizeof(float), &cube_vertices[ 0]),
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_NORMAL, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float), &cube_vertices[ 3]); 12 * sizeof(float), &cube_vertices[ 3]),
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_COLOR, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
12 * sizeof(float), &cube_vertices[ 6]); 12 * sizeof(float), &cube_vertices[ 6]),
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_TEXCOORD, evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float), &cube_vertices[10]); 12 * sizeof(float), &cube_vertices[10]),
evas_3d_mesh_index_data_set(data->mesh, EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]); 36, &cube_indices[0]),
evas_3d_mesh_vertex_assembly_set(data->mesh, EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES); evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES),
evas_3d_mesh_shade_mode_set(data->mesh, EVAS_3D_SHADE_MODE_FLAT); evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_FLAT),
evas_3d_mesh_frame_material_set(data->mesh, 0, data->material); evas_3d_mesh_frame_material_set(0, data->material));
data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH); data->mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH);
evas_3d_node_member_add(data->root_node, data->mesh_node); eo_do(data->root_node, evas_3d_node_member_add(data->mesh_node));
evas_3d_node_mesh_add(data->mesh_node, data->mesh); eo_do(data->mesh_node, evas_3d_node_mesh_add(data->mesh));
} }
static void static void
_scene_setup(Scene_Data *data) _scene_setup(Scene_Data *data)
{ {
data->scene = evas_3d_scene_add(evas); data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
evas_3d_scene_size_set(data->scene, WIDTH, HEIGHT); eo_do(data->scene,
evas_3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0); evas_3d_scene_size_set(WIDTH, HEIGHT),
evas_3d_scene_background_color_set(0.0, 0.0, 0.0, 0.0));
data->root_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_NODE); data->root_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_NODE);
@ -235,8 +247,9 @@ _scene_setup(Scene_Data *data)
_light_setup(data); _light_setup(data);
_mesh_setup(data); _mesh_setup(data);
evas_3d_scene_root_node_set(data->scene, data->root_node); eo_do(data->scene,
evas_3d_scene_camera_node_set(data->scene, data->camera_node); evas_3d_scene_root_node_set(data->root_node),
evas_3d_scene_camera_node_set(data->camera_node));
} }
int int