From f259ff8d4cf30ce2c23137702af04e123c599f99 Mon Sep 17 00:00:00 2001 From: "perepelits.m" Date: Thu, 25 Jun 2015 16:22:00 +0200 Subject: [PATCH] evas: fix shooter example Summary: Disable atlas flag for all objects, fix motion algorithm, add primitives. Reviewers: Hermet, raster, cedric Subscribers: cedric, artem.popov Differential Revision: https://phab.enlightenment.org/D2693 Signed-off-by: Cedric BAIL --- .../evas/shooter/evas-3d-shooter-header.h | 2 + .../evas/shooter/evas-3d-shooter-macros.h | 133 +++---- src/examples/evas/shooter/evas-3d-shooter.c | 333 ++++-------------- 3 files changed, 152 insertions(+), 316 deletions(-) diff --git a/src/examples/evas/shooter/evas-3d-shooter-header.h b/src/examples/evas/shooter/evas-3d-shooter-header.h index 235c85b873..de70da7747 100644 --- a/src/examples/evas/shooter/evas-3d-shooter-header.h +++ b/src/examples/evas/shooter/evas-3d-shooter-header.h @@ -21,6 +21,8 @@ typedef struct _Scene_Data { + Eo *cube_primitive; + Eo *sphere_primitive; Eo *cylinder_primitive; Eo *texture_diffuse_eagle; Eo *texture_diffuse_world; diff --git a/src/examples/evas/shooter/evas-3d-shooter-macros.h b/src/examples/evas/shooter/evas-3d-shooter-macros.h index 2eb3282602..bf3964a561 100644 --- a/src/examples/evas/shooter/evas-3d-shooter-macros.h +++ b/src/examples/evas/shooter/evas-3d-shooter-macros.h @@ -62,10 +62,50 @@ typedef struct _vec2 float y; } vec2; -#define KEY_MOTION(lateral, camera) \ - { \ - lateral_motion_indicator = lateral; \ - camera_move = camera; \ +#define KEY_MOTION(way) \ + { \ + for (i = 0; (motion_vec[i] > 0) && (!pressed); i++) \ + pressed = (motion_vec[i] == way); \ + \ + if (!pressed) \ + motion_vec[i] = way; \ + \ + if ((way == 1) || (way == 3)) \ + camera_move = CAMERA_MOVE; \ + else \ + camera_move = -CAMERA_MOVE; \ + \ + if (way < 3) \ + lateral_motion_indicator = 0; \ + else \ + lateral_motion_indicator = 1; \ + } + +#define KEY_MOTION_DOWN(way) \ + { \ + while ((motion_vec[i] != way) && (i < 4)) \ + i++; \ + for (j = i; j < 3; j++) \ + motion_vec[j] = motion_vec[j + 1]; \ + motion_vec[3] = 0; \ + \ + i = 0; \ + while (motion_vec[i] > 0) \ + i++; \ + if (i > 0) \ + { \ + if ((motion_vec[i - 1] == 1) || (motion_vec[i - 1] == 3)) \ + camera_move = CAMERA_MOVE; \ + else \ + camera_move = -CAMERA_MOVE; \ + \ + if (motion_vec[i-1] < 3) \ + lateral_motion_indicator = 0; \ + else \ + lateral_motion_indicator = 1; \ + } \ + else \ + camera_move = 0; \ } @@ -86,7 +126,7 @@ typedef struct _vec2 eo_do(mesh, evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG)); -#define SETUP_MESH(Object, Name, a, d, s) \ +#define ADD_MESH(Object, Name, a, d, s) \ data->material_##Object = eo_add(EVAS_CANVAS3D_MATERIAL_CLASS, evas); \ \ eo_do(data->material_##Object, \ @@ -99,11 +139,11 @@ typedef struct _vec2 evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_SPECULAR, s, s, s, 1.0), \ evas_canvas3d_material_shininess_set(50.0)); \ \ - data->mesh_##Name = eo_add(EVAS_CANVAS3D_MESH_CLASS, evas); \ - \ + data->mesh_##Name = eo_add(EVAS_CANVAS3D_MESH_CLASS, evas); + +#define SETUP_DEFAULT_MESH(Object, Name, Shade_Mode) \ eo_do(data->mesh_##Name, \ - evas_canvas3d_mesh_frame_add(0), \ - evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_DIFFUSE), \ + evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_##Shade_Mode), \ evas_canvas3d_mesh_vertex_assembly_set(EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES), \ evas_canvas3d_mesh_frame_material_set(0, data->material_##Object)); @@ -118,13 +158,13 @@ typedef struct _vec2 #define MATERIAL_TEXTURE_SET(Object, Name, file, image) \ eo_do(data->mesh_##Name, \ - efl_file_set(file, NULL), \ - evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG), \ - evas_canvas3d_mesh_frame_material_set(0, data->material_##Object)); \ + efl_file_set(file, NULL)); \ \ + SETUP_DEFAULT_MESH(Object, Name, PHONG) \ data->texture_diffuse_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \ \ eo_do(data->texture_diffuse_##Object, \ + evas_canvas3d_texture_atlas_enable_set(EINA_FALSE), \ evas_canvas3d_texture_file_set(image, NULL), \ evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \ EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST), \ @@ -137,31 +177,17 @@ typedef struct _vec2 data->texture_diffuse_##Object)); -#define CUBE_TEXTURE_SET(Object, Name, v_count, vertex1, vertex2, i_count, index, image) \ - int textcoords_count = 12; \ - int pos_count = 12; \ - if (&vertex1[10] != vertex2) \ - { \ - textcoords_count =2; \ - pos_count = 10; \ - } \ +#define CUBE_TEXTURE_SET(Object, Name, vertex, image) \ eo_do(data->mesh_##Name, \ - evas_canvas3d_mesh_vertex_count_set(v_count), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_POSITION, \ - pos_count * sizeof(float), &vertex1[ 0]), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_NORMAL, \ - pos_count * sizeof(float), &vertex1[ 3]), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_COLOR, \ - pos_count * sizeof(float), &vertex1[ 6]), \ + evas_canvas3d_mesh_from_primitive_set(0, data->cube_primitive), \ evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_TEXCOORD, \ - textcoords_count * sizeof(float), vertex2), \ - evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \ - i_count, &index[0]), \ - evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_NORMAL_MAP)); \ + 2 * sizeof(float), vertex)); \ \ + SETUP_DEFAULT_MESH(Object, Name, NORMAL_MAP) \ data->texture_diffuse_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \ \ eo_do(data->texture_diffuse_##Object, \ + evas_canvas3d_texture_atlas_enable_set(EINA_FALSE), \ evas_canvas3d_texture_file_set(image, NULL), \ evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \ EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST), \ @@ -178,6 +204,7 @@ typedef struct _vec2 data->texture_normal_##Object = eo_add(EVAS_CANVAS3D_TEXTURE_CLASS, evas); \ \ eo_do(data->texture_normal_##Object, \ + evas_canvas3d_texture_atlas_enable_set(EINA_FALSE), \ evas_canvas3d_texture_file_set(normal, NULL), \ evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, \ EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST), \ @@ -190,59 +217,43 @@ typedef struct _vec2 eo_do(data->mesh_##Name, \ evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_NORMAL_MAP)); -#define SPHERE_SET(Name) \ - eo_do(data->mesh_##Name, \ - evas_canvas3d_mesh_vertex_count_set(vertex_count), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_POSITION, \ - sizeof(vertex), &vertices[0].position), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_NORMAL, \ - sizeof(vertex), &vertices[0].normal), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_TANGENT, \ - sizeof(vertex), &vertices[0].tangent), \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_COLOR, \ - sizeof(vertex), &vertices[0].color); \ - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_TEXCOORD, \ - sizeof(vertex), &vertices[0].texcoord), \ - evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, \ - index_count, &indices[0])); - #define TEXTCOORDS_SET(Name, fb1, fb2, lr1, lr2, tb1, tb2) \ static float Name##_textcoords[] = \ { \ /* Front */ \ 0.0, 0.0, \ fb1, 0.0, \ - 0.0, fb2, \ fb1, fb2, \ - \ - /* Back */ \ 0.0, fb2, \ - fb1, fb2, \ - 0.0, 0.0, \ - fb1, 0.0, \ \ /* Left */ \ - 0.0, lr2, \ - lr1, lr2, \ - 0.0, 0.0, \ lr1, 0.0, \ + lr1, lr2, \ + 0.0, lr2, \ + 0.0, 0.0, \ + \ + /* Back */ \ + 0.0, 0.0, \ + fb1, 0.0, \ + fb1, fb2, \ + 0.0, fb2, \ \ /* Right */ \ 0.0, lr2, \ - lr1, lr2, \ 0.0, 0.0, \ lr1, 0.0, \ + lr1, lr2, \ \ /* Top */ \ + 0.0, 0.0, \ 0.0, tb2, \ tb1, tb2, \ - 0.0, 0.0, \ tb1, 0.0, \ \ /* Bottom */ \ - 0.0, tb2, \ - tb1, tb2, \ - 0.0, 0.0, \ tb1, 0.0, \ + tb1, tb2, \ + 0.0, tb2, \ + 0.0, 0.0, \ }; diff --git a/src/examples/evas/shooter/evas-3d-shooter.c b/src/examples/evas/shooter/evas-3d-shooter.c index 055407a011..c83ab0dc39 100644 --- a/src/examples/evas/shooter/evas-3d-shooter.c +++ b/src/examples/evas/shooter/evas-3d-shooter.c @@ -44,6 +44,7 @@ int lateral_motion_indicator = 0; int step_indicator = 0; int fall_indicator = 0; int aabb_index = 0; +int motion_vec[4]; typedef struct _Ecore_Timers { @@ -51,56 +52,6 @@ typedef struct _Ecore_Timers void *data; } Timers; -static float cube_vertices[] = -{ - /* Front */ - -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, - 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, - -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, - 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, - - /* Back */ - 1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, - -1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, - 1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, - -1.0, -1.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, - - /* Left */ - -1.0, 1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, - -1.0, 1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, - -1.0, -1.0, -1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, - -1.0, -1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, - - /* Right */ - 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, - 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, - 1.0, -1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, - 1.0, -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, - - /* Top */ - -1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, - 1.0, 1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, - -1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, - 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, - - /* Bottom */ - 1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, - -1.0, -1.0, -1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, - 1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, - -1.0, -1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0, 1.0, -}; - -static float grass_vertices[] = -{ - /* Top */ - -6.5, 0.0, -4.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 4.0, - 6.5, 0.0, -4.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 4.0, 4.0, - -6.5, 0.0, 4.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, - 6.5, 0.0, 4.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 4.0, 0.0, - -}; - - static const unsigned short cube_indices[] = { /* Front */ @@ -122,12 +73,6 @@ static const unsigned short cube_indices[] = 20, 21, 22, 22, 21, 23 }; -static const unsigned short grass_indices[] = -{ - /* Top */ - 0, 1, 2, 2, 1, 3 -}; - static int vertex_count = 0; static vertex *vertices = NULL; @@ -143,6 +88,7 @@ _key_down(void *data, Evas_Event_Key_Down *ev = event_info; Evas_Real x, y, z; Scene_Data *scene = (Scene_Data *)data; + Eina_Bool pressed = EINA_FALSE; int i = 0; if (!strcmp(ev->key, "space")) { @@ -155,13 +101,13 @@ _key_down(void *data, } } else if (!strcmp(ev->key, "s")) - KEY_MOTION(0, CAMERA_MOVE) + KEY_MOTION(1) else if (!strcmp(ev->key, "w")) - KEY_MOTION(0, -CAMERA_MOVE) + KEY_MOTION(2) else if (!strcmp(ev->key, "d")) - KEY_MOTION(1, CAMERA_MOVE) + KEY_MOTION(3) else if (!strcmp(ev->key, "a")) - KEY_MOTION(1, -CAMERA_MOVE) + KEY_MOTION(4) else if (!strcmp(ev->key, "B")) { if (!scene->blending) @@ -308,12 +254,19 @@ _key_up(void *data EINA_UNUSED, void *event_info) { Evas_Event_Key_Down *ev = event_info; + int i = 0, j; if (!strcmp(ev->key, "space")) space_move = 0; - else if ((!strcmp(ev->key, "s")) || (!strcmp(ev->key, "w")) || - (!strcmp(ev->key, "d")) || (!strcmp(ev->key, "a"))) - camera_move = 0; + else if (!strcmp(ev->key, "s")) + KEY_MOTION_DOWN(1) + else if (!strcmp(ev->key, "w")) + KEY_MOTION_DOWN(2) + else if (!strcmp(ev->key, "d")) + KEY_MOTION_DOWN(3) + else if (!strcmp(ev->key, "a")) + KEY_MOTION_DOWN(4) + } /* animate camera, create artificial intelligence of warrior */ @@ -561,7 +514,7 @@ _animate_scene_gun(void *data) _scale(scene->mesh_node_rocket[i], 0.004); else if (rocket_indicator[i] == 1) { - _scale(scene->mesh_node_rocket[i], 0.2); + _scale(scene->mesh_node_rocket[i], 0.4); eo_do(scene->material_rocket[i], evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_AMBIENT, 0.8, 0.8, 0.8, 1.0), evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_DIFFUSE, 0.2, 0.2, 0.0, 1.0), @@ -606,7 +559,7 @@ _animate_scene_gun(void *data) evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_DIFFUSE, 0.9, 0.1, 0.1, 1.0), evas_canvas3d_material_color_set(EVAS_CANVAS3D_MATERIAL_SPECULAR, 0.5, 0.5, 0.5, 1.0)); - _scale(scene->mesh_node_rocket[i], 2.3); + _scale(scene->mesh_node_rocket[i], 4.5); rocket_indicator[i] = 3; } } @@ -792,171 +745,24 @@ _play_scene(void *data EINA_UNUSED, } } -void -_world_init(int precision) -{ - int i, j; - unsigned short *index; - double lati, y , r, longi; - vec3 e1, e2; - float du1, du2, dv1, dv2, f; - vec3 tangent; - - vertex_count = (precision + 1) * (precision + 1); - index_count = precision * precision * 6; - - /* Allocate buffer. */ - vertices = malloc(sizeof(vertex) * vertex_count); - indices = malloc(sizeof(unsigned short) * index_count); - - for (i = 0; i <= precision; i++) - { - lati = (M_PI * (double)i) / (double)precision; - y = cos(lati); - r = fabs(sin(lati)); - - for (j = 0; j <= precision; j++) - { - longi = (M_PI * 2.0 * j) / precision; - vertex *v = &vertices[i * (precision + 1) + j]; - - if (j == 0 || j == precision) - v->position.x = 0.0; - else - v->position.x = r * sin(longi); - - v->position.y = y; - - if (j == 0 || j == precision) - v->position.z = r; - else - v->position.z = r * cos(longi); - - v->normal = v->position; - - if (v->position.x > 0.0) - { - v->tangent.x = -v->normal.y; - v->tangent.y = v->normal.x; - v->tangent.z = v->normal.z; - } - else - { - v->tangent.x = v->normal.y; - v->tangent.y = -v->normal.x; - v->tangent.z = v->normal.z; - } - - v->color.x = v->position.x; - v->color.y = v->position.y; - v->color.z = v->position.z; - v->color.w = 1.0; - - if (j == precision) - v->texcoord.x = 1.0; - else if (j == 0) - v->texcoord.x = 0.0; - else - v->texcoord.x = (double)j / (double)precision; - - if (i == precision) - v->texcoord.y = 1.0; - else if (i == 0) - v->texcoord.y = 0.0; - else - v->texcoord.y = 1.0 - (double)i / (double)precision; - } - } - - index = &indices[0]; - - for (i = 0; i < precision; i++) - { - for (j = 0; j < precision; j++) - { - *index++ = i * (precision + 1) + j; - *index++ = i * (precision + 1) + j + 1; - *index++ = (i + 1) * (precision + 1) + j; - - *index++ = (i + 1) * (precision + 1) + j; - *index++ = i * (precision + 1) + j + 1; - *index++ = (i + 1) * (precision + 1) + j + 1; - } - } - - for (i = 0; i < index_count; i += 3) - { - vertex *v0 = &vertices[indices[i + 0]]; - vertex *v1 = &vertices[indices[i + 1]]; - vertex *v2 = &vertices[indices[i + 2]]; - - e1.x = v1->position.x - v0->position.x; - e1.y = v1->position.y - v0->position.y; - e1.z = v1->position.z - v0->position.z; - - e2.x = v2->position.x - v0->position.x; - e2.y = v2->position.y - v0->position.y; - e2.z = v2->position.z - v0->position.z; - - du1 = v1->texcoord.x - v0->texcoord.x; - dv1 = v1->texcoord.y - v0->texcoord.y; - - du2 = v2->texcoord.x - v0->texcoord.x; - dv2 = v2->texcoord.y - v0->texcoord.y; - - f = 1.0 / (du1 * dv2 - du2 * dv1); - - tangent.x = f * (dv2 * e1.x - dv1 * e2.x); - tangent.y = f * (dv2 * e1.y - dv1 * e2.y); - tangent.z = f * (dv2 * e1.z - dv1 * e2.z); - - v0->tangent = tangent; - } - - for (i = 0; i <= precision; i++) - { - for (j = 0; j <= precision; j++) - { - if (j == precision) - { - vertex *v = &vertices[i * (precision + 1) + j]; - v->tangent = vertices[i * (precision + 1)].tangent; - } - } - } -} - void _mesh_setup_gun_planet(Scene_Data *data) { - _world_init(20); - /* Setup material and texture for world. */ - SETUP_MESH(world, world, 0.5, 0.5, 1.0); + ADD_MESH(world, world, 0.5, 0.5, 1.0); + eo_do(data->mesh_world, + evas_canvas3d_mesh_from_primitive_set(0, data->sphere_primitive)); + SETUP_DEFAULT_MESH(world, world, DIFFUSE); SETUP_MESH_NODE(world); - eo_do(data->mesh_world, - evas_canvas3d_mesh_vertex_count_set(vertex_count), - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_POSITION, - sizeof(vertex), &vertices[0].position), - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_NORMAL, - sizeof(vertex), &vertices[0].normal), - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_TANGENT, - sizeof(vertex), &vertices[0].tangent), - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_COLOR, - sizeof(vertex), &vertices[0].color); - evas_canvas3d_mesh_frame_vertex_data_set(0, EVAS_CANVAS3D_VERTEX_TEXCOORD, - sizeof(vertex), &vertices[0].texcoord), - evas_canvas3d_mesh_index_data_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, index_count, &indices[0])); - eo_do(data->mesh_node_world, - evas_canvas3d_node_scale_set(150, 150, 150), + evas_canvas3d_node_scale_set(350, 350, 350), evas_canvas3d_node_position_set(0.0, 0.0, 0.0)); /* Setup material and texture for player */ - SETUP_MESH(soldier, soldier, 0.2, 0.6, 1.0) + ADD_MESH(soldier, soldier, 0.2, 0.6, 1.0) MATERIAL_TEXTURE_SET(soldier, soldier, soldier_path, soldier_tex_path) SETUP_MESH_NODE(soldier) @@ -970,12 +776,12 @@ _mesh_setup_gun_planet(Scene_Data *data) 0, 1, 0), evas_canvas3d_node_mesh_frame_set(data->mesh_soldier, 0)); - SETUP_MESH(soldier, soldier_jump, 1.0, 1.0, 1.0) + ADD_MESH(soldier, soldier_jump, 1.0, 1.0, 1.0) MATERIAL_TEXTURE_SET(soldier, soldier_jump, soldier_jump_path, soldier_tex_path) /* Setup material and texture for tommy gun */ - SETUP_MESH(tommy, tommy, 0.0, 0.3, 1.0) + ADD_MESH(tommy, tommy, 0.0, 0.3, 1.0) SETUP_MESH_NODE(tommy) eo_do(data->mesh_tommy, efl_file_set(gun_path, NULL), @@ -991,7 +797,7 @@ _mesh_setup_gun_planet(Scene_Data *data) /* Setup material and texture for gazebo */ - SETUP_MESH(gazebo, gazebo, 0.01, 1.0, 1.0) + ADD_MESH(gazebo, gazebo, 0.01, 1.0, 1.0) SETUP_MESH_NODE(gazebo) MATERIAL_TEXTURE_SET(gazebo, gazebo, gazebo_bot_path, gazebo_b_path) NORMAL_SET(gazebo, gazebo, gazebo_b_n_path) @@ -1003,7 +809,7 @@ _mesh_setup_gun_planet(Scene_Data *data) /* Setup material and texture for carpet */ - SETUP_MESH(carpet, carpet, 0.01, 1.0, 1.0) + ADD_MESH(carpet, carpet, 0.01, 1.0, 1.0) SETUP_MESH_NODE(carpet) MATERIAL_TEXTURE_SET(carpet, carpet, gazebo_top_path, gazebo_t_path) NORMAL_SET(carpet, carpet, gazebo_t_n_path) @@ -1011,6 +817,7 @@ _mesh_setup_gun_planet(Scene_Data *data) if (data->blending) { eo_do(data->texture_diffuse_carpet, + evas_canvas3d_texture_atlas_enable_set(EINA_FALSE), evas_canvas3d_texture_file_set(gazebo_t_trans_path, NULL)); eo_do(data->mesh_carpet, evas_canvas3d_mesh_blending_enable_set(EINA_TRUE), @@ -1022,7 +829,7 @@ _mesh_setup_gun_planet(Scene_Data *data) evas_canvas3d_node_position_set(-20, -10, -35)); /* Setup material and texture for eagle. */ - SETUP_MESH(eagle, eagle, 0.01, 1.0, 1.0) + ADD_MESH(eagle, eagle, 0.01, 1.0, 1.0) SETUP_MESH_NODE(eagle) MATERIAL_TEXTURE_SET(eagle, eagle, eagle_path, eagle_tex_path) @@ -1031,7 +838,9 @@ _mesh_setup_gun_planet(Scene_Data *data) evas_canvas3d_node_position_set(-20, 20, 0)); /* Set material for bounding box */ - SETUP_MESH(cube, cube, 0.01, 1.0, 1.0) + ADD_MESH(cube, cube, 0.01, 1.0, 1.0) + eo_do(data->mesh_cube, evas_canvas3d_mesh_frame_add(0)); + SETUP_DEFAULT_MESH(cube, cube, DIFFUSE); SETUP_MESH_NODE(cube) eo_do(data->mesh_cube, @@ -1042,15 +851,15 @@ _mesh_setup_gun_planet(Scene_Data *data) /* Setup mesh for column carpet */ - SETUP_MESH(column_c, column_c, 0.2, 0.8, 1.0) + ADD_MESH(column_c, column_c, 0.2, 0.8, 1.0) SETUP_MESH_NODE(column_c) - TEXTCOORDS_SET(cube, 5.0, 0.1, 5.0, 0.1, 5.0, 0.4) - CUBE_TEXTURE_SET(column_c, column_c, 24, cube_vertices, cube_textcoords, 36, cube_indices, red_brick_path) + TEXTCOORDS_SET(cube, 5.0, 0.4, 5.0, 0.1, 5.0, 0.1) + CUBE_TEXTURE_SET(column_c, column_c, cube_textcoords, red_brick_path) NORMAL_SET(column_c, column_c, red_brick_n_path) eo_do(data->mesh_node_column_c, evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0), - evas_canvas3d_node_scale_set(48.0, 0.8 , 2.4 ), + evas_canvas3d_node_scale_set(96.0, 1.6 , 4.8 ), evas_canvas3d_node_position_set(10 , 9.0, -12)); /* Setup mesh for bounding sphere */ @@ -1083,32 +892,32 @@ _mesh_setup_wall(Scene_Data *data, int index) { /* Setup material and texture for wall. */ - SETUP_MESH(wall, wall[index], 0.2, 0.8, 1.0) + ADD_MESH(wall, wall[index], 0.2, 0.8, 1.0) SETUP_MESH_NODE(wall[index]) - TEXTCOORDS_SET(wall, 12.0, 1.0, 0.2, 1.0, 12.0, 0.2) - CUBE_TEXTURE_SET(wall, wall[index], 24, cube_vertices, wall_textcoords, 36, cube_indices, red_brick_path) + TEXTCOORDS_SET(wall, 12.0, 0.2, 0.2, 1.0, 12.0, 1.0) + CUBE_TEXTURE_SET(wall, wall[index], wall_textcoords, red_brick_path) NORMAL_SET(wall, wall[index], red_brick_n_path) /* placing of wall carpet on the floor grid */ if (index == 0) eo_do(data->mesh_node_wall[index], - evas_canvas3d_node_scale_set(6.7 * 9.75, 10.0 , 1.0 ), + evas_canvas3d_node_scale_set(6.7 * 19.5, 20.0, 2.0), evas_canvas3d_node_position_set(-39.7 + 18.6 * 3, 0.0, -60.3)); else if (index == 1) { eo_do(data->mesh_node_wall[index], - evas_canvas3d_node_scale_set(5 * 9.75, 10.0 , 1.0 ), + evas_canvas3d_node_scale_set(5 * 19.5, 20.0, 2.0), evas_canvas3d_node_position_set(81.2, 0.0, -51.5 + 19.5 * 2), evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0)); } else if (index == 2) eo_do(data->mesh_node_wall[index], - evas_canvas3d_node_scale_set(6.7 * 9.75, 10.0 , 1.0 ), + evas_canvas3d_node_scale_set(6.7 * 19.5, 20.0, 2.0), evas_canvas3d_node_position_set(-39.7 + 18.6*3, 0.0, 35.3)); else if (index == 3) { eo_do(data->mesh_node_wall[index], - evas_canvas3d_node_scale_set(5* 9.75, 10.0 , 1.0 ), + evas_canvas3d_node_scale_set(5* 19.5, 20.0, 2.0), evas_canvas3d_node_position_set(-48.4, 0.0, -51.5 + 19.5 * 2), evas_canvas3d_node_orientation_angle_axis_set(90, 0, 1.0, 0.0)); } @@ -1139,7 +948,6 @@ _mesh_setup_column(Scene_Data *data, int index) evas_canvas3d_mesh_from_primitive_set(0, data->cylinder_primitive), evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_DIFFUSE), evas_canvas3d_mesh_vertex_assembly_set(EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES), - evas_canvas3d_mesh_frame_material_set(0, data->material_column), evas_canvas3d_mesh_shade_mode_set(EVAS_CANVAS3D_SHADE_MODE_PHONG), evas_canvas3d_mesh_frame_material_set(0, data->material_column)); @@ -1147,6 +955,7 @@ _mesh_setup_column(Scene_Data *data, int index) eo_do(data->texture_diffuse_column, evas_canvas3d_texture_file_set(red_brick_path, NULL), + evas_canvas3d_texture_atlas_enable_set(EINA_FALSE), evas_canvas3d_texture_filter_set(EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST, EVAS_CANVAS3D_TEXTURE_FILTER_NEAREST), evas_canvas3d_texture_wrap_set(EVAS_CANVAS3D_WRAP_MODE_REPEAT, EVAS_CANVAS3D_WRAP_MODE_REPEAT)); @@ -1170,16 +979,16 @@ _mesh_setup_grass(Scene_Data *data) { /* Setup material and texture for grass. */ - SETUP_MESH(grass, grass, 0.4, 0.8, 1.0) + ADD_MESH(grass, grass, 0.4, 0.8, 1.0) SETUP_MESH_NODE(grass) - CUBE_TEXTURE_SET(grass, grass, 4, grass_vertices, &grass_vertices[10], - 6, grass_indices, gray_brick_path) + TEXTCOORDS_SET(grass, 6.0, 3.0, 1.0, 1.0, 1.0, 1.0) + CUBE_TEXTURE_SET(grass, grass, grass_textcoords, gray_brick_path) NORMAL_SET(grass, grass, gray_brick_n_path) /* placing of grass carpet on the floor grid */ eo_do(data->mesh_node_grass, - evas_canvas3d_node_scale_set(10.0, 1.0, 12.0), - evas_canvas3d_node_position_set(16, -10.0, -12)); + evas_canvas3d_node_scale_set(130.0, 1.0, 96.0), + evas_canvas3d_node_position_set(16.5, -10.0, -12)); } void @@ -1189,25 +998,24 @@ _mesh_setup(Scene_Data *data, float h EINA_UNUSED, float w EINA_UNUSED, float d if (!index) { - SETUP_MESH(level[0], level[index], 0.4, 0.8, 1.0) + ADD_MESH(level[0], level[index], 0.4, 0.8, 1.0) SETUP_MESH_NODE(level[index]) - CUBE_TEXTURE_SET(level[0], level[index], 24, cube_vertices, isource, 36, cube_indices, red_brick_path) + CUBE_TEXTURE_SET(level[0], level[index], isource, red_brick_path) NORMAL_SET(level[0], level[index], red_brick_n_path) eo_do(data->mesh_node_level[index], - evas_canvas3d_node_scale_set(9.75, 10.0, 1.0), + evas_canvas3d_node_scale_set(19.5, 20.0, 2.0), evas_canvas3d_node_position_set(50, 0, -15)); } else { - SETUP_MESH(level[1], level[index], 0.4, 0.8, 1.0) + ADD_MESH(level[1], level[index], 0.4, 0.8, 1.0) SETUP_MESH_NODE(level[index]) - CUBE_TEXTURE_SET(level[1], level[index], 24, cube_vertices, - isource, 36, cube_indices, gray_brick_path) + CUBE_TEXTURE_SET(level[1], level[index], isource, gray_brick_path) NORMAL_SET(level[1], level[index], gray_brick_n_path) eo_do(data->mesh_node_level[index], - evas_canvas3d_node_scale_set(1.0, 1.0, 4.0), + evas_canvas3d_node_scale_set(2.0, 2.0, 8.0), evas_canvas3d_node_position_set(40 + (2 * index), -10 + (2 * index), -10)); } } @@ -1217,7 +1025,7 @@ _mesh_setup_warrior(Scene_Data *data) { /* Setup mesh for warrior */ - SETUP_MESH(warrior, warrior, 0.4, 0.6, 1.0) + ADD_MESH(warrior, warrior, 0.4, 0.6, 1.0) SETUP_MESH_NODE(warrior) MATERIAL_TEXTURE_SET(warrior, warrior, warrior_path, warrior_tex_path) @@ -1229,7 +1037,7 @@ _mesh_setup_warrior(Scene_Data *data) void _mesh_setup_snake(Scene_Data *data) { - SETUP_MESH(snake, snake, 0.01, 1.0, 1.0) + ADD_MESH(snake, snake, 0.01, 1.0, 1.0) SETUP_MESH_NODE(snake) MATERIAL_TEXTURE_SET(snake, snake, snake_path, snake_tex_path) NORMAL_SET(snake, snake, snake_tex_n_path) @@ -1242,11 +1050,12 @@ _mesh_setup_snake(Scene_Data *data) void _mesh_setup_rocket(Scene_Data *data, int index) { - SETUP_MESH(rocket[index], rocket[index], 0.8, 0.2, 0.5); + ADD_MESH(rocket[index], rocket[index], 0.8, 0.2, 0.5); + eo_do(data->mesh_rocket[index], + evas_canvas3d_mesh_from_primitive_set(0, data->sphere_primitive)); + SETUP_DEFAULT_MESH(rocket[index], rocket[index], DIFFUSE); SETUP_MESH_NODE(rocket[index]); - SPHERE_SET(rocket[index]) - eo_do(data->mesh_node_rocket[index], evas_canvas3d_node_scale_set(1, 1, 1), evas_canvas3d_node_position_set(ROCKET_POS_X, ROCKET_POS_Y, ROCKET_POS_Z)); @@ -1256,6 +1065,20 @@ void _scene_setup(Scene_Data *data) { int i = 0; + + for (i = 0; i < 4; i++) + motion_vec[i] = 0; + + data->cube_primitive = eo_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas); + eo_do(data->cube_primitive, + evas_canvas3d_primitive_form_set(EVAS_CANVAS3D_MESH_PRIMITIVE_CUBE), + evas_canvas3d_primitive_precision_set(10)); + + data->sphere_primitive = eo_add(EVAS_CANVAS3D_PRIMITIVE_CLASS, evas); + eo_do(data->sphere_primitive, + evas_canvas3d_primitive_form_set(EVAS_CANVAS3D_MESH_PRIMITIVE_SPHERE), + evas_canvas3d_primitive_precision_set(50)); + global_scene = eo_add(EVAS_CANVAS3D_SCENE_CLASS, evas); eo_do(global_scene, @@ -1288,10 +1111,10 @@ _scene_setup(Scene_Data *data) for ( i = 0; i < 4; i++) _mesh_setup_wall(data, i); - TEXTCOORDS_SET(bricks1, 1.0, 1.0, 0.2, 1.0, 1.0, 0.2) + TEXTCOORDS_SET(bricks1, 1.0, 0.2, 0.2, 1.0, 1.0, 1.0) _mesh_setup(data, 9.75, 10, 1, bricks1_textcoords, 0); - TEXTCOORDS_SET(bricks2, 1.0, 0.5, 3.0, 0.5, 2.0, 1.5) + TEXTCOORDS_SET(bricks2, 1.0, 1.5, 3.0, 0.5, 2.0, 0.5) for (i = 1; i < 10; i++) _mesh_setup(data, 1, 1, 4, bricks2_textcoords, i);