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)
{
data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
eo_do(data->camera,
evas_3d_camera_projection_perspective_set(60.0, 1.0, 2.0, 50.0));
// data->camera_node =
// 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);
eo_do(data->camera_node,
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_camera_set(data->camera),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->camera_node));
}
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 = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT);
eo_do(data->light_node,
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_light_set(data->light),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
}
static void
_mesh_setup(Scene_Data *data)
{
/* Setup material. */
data->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material,
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_color_set(EVAS_3D_MATERIAL_AMBIENT,
0.2, 0.2, 0.2, 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,
1.0, 1.0, 1.0, 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, 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_shininess_set(100.0));
/* Setup mesh. */
@ -184,37 +181,35 @@ _mesh_setup(Scene_Data *data)
eo_do(data->mesh,
evas_3d_mesh_vertex_count_set(24),
evas_3d_mesh_frame_add(0),
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(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float),
&cube_vertices[3]),
12 * sizeof(float), &cube_vertices[ 3]),
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(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float),
&cube_vertices[10]),
12 * sizeof(float), &cube_vertices[10]),
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]),
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_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);
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->root_node, evas_3d_node_member_add(data->mesh_node));
eo_do(data->mesh_node, evas_3d_node_mesh_add(data->mesh));
}
static void
_scene_setup(Scene_Data *data)
{
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));
// 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);
data->camera_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_CAMERA);
eo_do(data->camera_node,
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_camera_set(data->camera),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
}
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 = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_LIGHT);
eo_do(data->light_node,
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_light_set(data->light),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
}
static void
@ -198,92 +195,86 @@ _mesh_setup(Scene_Data *data)
{
/* Setup material. */
data->material0 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
data->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material0,
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_color_set(EVAS_3D_MATERIAL_AMBIENT,
0.2, 0.2, 0.2, 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,
1.0, 1.0, 1.0, 1.0),
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.2, 0.2, 0.2, 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, 1.0, 1.0, 1.0, 1.0),
evas_3d_material_shininess_set(100.0));
data->material1 = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
eo_do(data->material1,
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.2, 0.2, 0.2, 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,
1.0, 1.0, 1.0, 1.0),
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_DIFFUSE, 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_shininess_set(100.0));
/* Texture 1 */
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);
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);
eo_do(data->texture_normal, evas_3d_texture_file_set("normal_lego.png",
NULL));
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->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. */
data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh,
evas_3d_mesh_vertex_count_set(24),
evas_3d_mesh_frame_add(0),
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(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float),
&cube_vertices[3]),
12 * sizeof(float), &cube_vertices[3]),
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(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float),
&cube_vertices[10]),
12 * sizeof(float), &cube_vertices[10]),
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]),
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_frame_material_set(0, data->material0),
evas_3d_mesh_frame_add(20),
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);
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->root_node, evas_3d_node_member_add(data->mesh_node));
eo_do(data->mesh_node, evas_3d_node_mesh_add(data->mesh));
}
static void
_scene_setup(Scene_Data *data)
{
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));
// 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_Evas.h>
#include <stdio.h>
@ -28,7 +30,8 @@ _animate_scene(void *data)
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 */
if (angle > 360.0)
@ -254,37 +257,39 @@ _on_mouse_down(void *data EINA_UNUSED,
Evas_Object *o,
void *einfo)
{
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;
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;
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_y = ev->canvas.y - y;
obj_x = ev->canvas.x - x;
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_y = obj_y * scene_h / (Evas_Real)h;
scene_x = obj_x * scene_w / (Evas_Real)w;
scene_y = obj_y * scene_h / (Evas_Real)h;
if (evas_3d_scene_pick(scene, scene_x, scene_y, &n, &m, &s, &t))
printf("Picked : ");
else
printf("Not picked : ");
eo_do(scene, pick = evas_3d_scene_pick(scene_x, scene_y, &n, &m, &s, &t));
if (pick)
printf("Picked : ");
else
printf("Not picked : ");
printf("output(%d, %d) canvas(%d, %d) object(%d, %d) scene(%f, %f) texcoord(%f, %f) "
"node(%p) 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, m);
"node(%p) 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, m);
}
int
@ -305,69 +310,73 @@ main(void)
evas = ecore_evas_get(ecore_evas);
/* 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. */
root_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_NODE);
/* Add the camera. */
camera = evas_3d_camera_add(evas);
evas_3d_camera_projection_perspective_set(camera, 30.0, 1.0, 1.0, 100.0);
camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
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);
evas_3d_node_camera_set(camera_node, camera);
evas_3d_node_member_add(root_node, camera_node);
evas_3d_node_position_set(camera_node, 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_SPACE_PARENT, 0.0, 1.0, 0.0);
eo_do(camera_node,
evas_3d_node_camera_set(camera);
evas_3d_node_position_set(0.0, 0.0, 5.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(camera_node));
/* Add the cube mesh. */
_sphere_init(100);
mesh = evas_3d_mesh_add(evas);
evas_3d_mesh_vertex_count_set(mesh, vertex_count);
evas_3d_mesh_frame_add(mesh, 0);
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_POSITION,
sizeof(vertex), &vertices[0].position);
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_NORMAL,
sizeof(vertex), &vertices[0].normal);
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_TANGENT,
sizeof(vertex), &vertices[0].tangent);
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_COLOR,
sizeof(vertex), &vertices[0].color);
evas_3d_mesh_frame_vertex_data_set(mesh, 0, EVAS_3D_VERTEX_TEXCOORD,
sizeof(vertex), &vertices[0].texcoord);
mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(mesh,
evas_3d_mesh_vertex_count_set(vertex_count),
evas_3d_mesh_frame_add(0),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
sizeof(vertex), &vertices[0].position),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
sizeof(vertex), &vertices[0].normal),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TANGENT,
sizeof(vertex), &vertices[0].tangent),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
sizeof(vertex), &vertices[0].color),
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_vertex_assembly_set(mesh, EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES);
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0]),
evas_3d_mesh_vertex_assembly_set(EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES));
material = evas_3d_material_add(evas);
evas_3d_mesh_frame_material_set(mesh, 0, material);
material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
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_texture_filter_set(texture_diffuse, EVAS_3D_TEXTURE_FILTER_LINEAR, EVAS_3D_TEXTURE_FILTER_LINEAR);
evas_3d_material_texture_set(material, EVAS_3D_MATERIAL_DIFFUSE, texture_diffuse);
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(material, EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE);
evas_3d_material_enable_set(material, EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE);
evas_3d_material_enable_set(material, EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE);
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);
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));
mesh_node = evas_3d_node_add(evas, EVAS_3D_NODE_TYPE_MESH);
evas_3d_node_member_add(root_node, mesh_node);
evas_3d_node_mesh_add(mesh_node, mesh);
evas_3d_mesh_shade_mode_set(mesh, EVAS_3D_SHADE_MODE_DIFFUSE);
eo_do(root_node, evas_3d_node_member_add(mesh_node));
eo_do(mesh_node, evas_3d_node_mesh_add(mesh));
eo_do(mesh, evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_DIFFUSE));
/* Set up scene. */
evas_3d_scene_root_node_set(scene, root_node);
evas_3d_scene_camera_node_set(scene, camera_node);
evas_3d_scene_size_set(scene, WIDTH, HEIGHT);
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 evas objects. */
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_Evas.h>
#include <stdio.h>
@ -119,7 +121,8 @@ _animate_scene(void *data)
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 */
if (angle > 360.0)
@ -147,87 +150,96 @@ _animate_scene(void *data)
static void
_camera_setup(Scene_Data *data)
{
data->camera = evas_3d_camera_add(evas);
evas_3d_camera_projection_perspective_set(data->camera, 30.0, 1.0, 2.0, 50.0);
data->camera = eo_add(EVAS_3D_CAMERA_CLASS, evas);
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);
evas_3d_node_camera_set(data->camera_node, data->camera);
evas_3d_node_member_add(data->root_node, data->camera_node);
evas_3d_node_position_set(data->camera_node, 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_SPACE_PARENT, 0.0, 1.0, 0.0);
eo_do(data->camera_node,
evas_3d_node_camera_set(data->camera),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node,
evas_3d_node_member_add(data->camera_node));
}
static void
_light_setup(Scene_Data *data)
{
data->light = evas_3d_light_add(evas);
evas_3d_light_ambient_set(data->light, 0.2, 0.2, 0.2, 1.0);
evas_3d_light_diffuse_set(data->light, 1.0, 1.0, 1.0, 1.0);
evas_3d_light_specular_set(data->light, 1.0, 1.0, 1.0, 1.0);
data->light = eo_add(EVAS_3D_LIGHT_CLASS, evas);
eo_do(data->light,
evas_3d_light_ambient_set(0.2, 0.2, 0.2, 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);
evas_3d_node_light_set(data->light_node, data->light);
evas_3d_node_member_add(data->root_node, data->light_node);
evas_3d_node_position_set(data->light_node, 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_SPACE_PARENT, 0.0, 1.0, 0.0);
eo_do(data->light_node,
evas_3d_node_light_set(data->light),
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_SPACE_PARENT, 0.0, 1.0, 0.0));
eo_do(data->root_node, evas_3d_node_member_add(data->light_node));
}
static void
_mesh_setup(Scene_Data *data)
{
/* Setup material. */
data->material = evas_3d_material_add(evas);
data->texture = evas_3d_texture_add(evas);
data->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas);
data->texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas);
evas_3d_texture_source_set(data->texture, source);
evas_3d_texture_source_visible_set(data->texture, EINA_TRUE);
eo_do(data->texture,
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);
evas_3d_material_enable_set(data->material, EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE);
evas_3d_material_enable_set(data->material, EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE);
eo_do(data->material,
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_color_set(data->material, 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(data->material, EVAS_3D_MATERIAL_SPECULAR, 1.0, 1.0, 1.0, 1.0);
evas_3d_material_shininess_set(data->material, 100.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, 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_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. */
data->mesh = evas_3d_mesh_add(evas);
evas_3d_mesh_vertex_count_set(data->mesh, 24);
evas_3d_mesh_frame_add(data->mesh, 0);
data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas);
eo_do(data->mesh,
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,
12 * sizeof(float), &cube_vertices[ 0]);
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float), &cube_vertices[ 3]);
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_COLOR,
12 * sizeof(float), &cube_vertices[ 6]);
evas_3d_mesh_frame_vertex_data_set(data->mesh, 0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float), &cube_vertices[10]);
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION,
12 * sizeof(float), &cube_vertices[ 0]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL,
12 * sizeof(float), &cube_vertices[ 3]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_COLOR,
12 * sizeof(float), &cube_vertices[ 6]),
evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_TEXCOORD,
12 * sizeof(float), &cube_vertices[10]),
evas_3d_mesh_index_data_set(data->mesh, EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]);
evas_3d_mesh_vertex_assembly_set(data->mesh, EVAS_3D_VERTEX_ASSEMBLY_TRIANGLES);
evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT,
36, &cube_indices[0]),
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);
evas_3d_node_member_add(data->root_node, data->mesh_node);
evas_3d_node_mesh_add(data->mesh_node, data->mesh);
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));
}
static void
_scene_setup(Scene_Data *data)
{
data->scene = evas_3d_scene_add(evas);
evas_3d_scene_size_set(data->scene, WIDTH, HEIGHT);
evas_3d_scene_background_color_set(data->scene, 0.0, 0.0, 0.0, 0.0);
data->scene = eo_add(EVAS_3D_SCENE_CLASS, evas);
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));
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);
_mesh_setup(data);
evas_3d_scene_root_node_set(data->scene, data->root_node);
evas_3d_scene_camera_node_set(data->scene, data->camera_node);
eo_do(data->scene,
evas_3d_scene_root_node_set(data->root_node),
evas_3d_scene_camera_node_set(data->camera_node));
}
int