forked from enlightenment/efl
evas: fix Evas_3D examples to use Eo API.
This commit is contained in:
parent
07c3edec4a
commit
bcfae42b3c
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
@ -262,18 +265,20 @@ _on_mouse_down(void *data EINA_UNUSED,
|
|||
Evas_Real s, t;
|
||||
Evas_3D_Node *n;
|
||||
Evas_3D_Mesh *m;
|
||||
Eina_Bool pick;
|
||||
|
||||
evas_object_geometry_get(o, &x, &y, &w, &h);
|
||||
|
||||
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;
|
||||
|
||||
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));
|
||||
if (pick)
|
||||
printf("Picked : ");
|
||||
else
|
||||
printf("Not picked : ");
|
||||
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue