forked from enlightenment/efl
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 <cedric@osg.samsung.com>
This commit is contained in:
parent
2b29f4dfbf
commit
f259ff8d4c
|
@ -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;
|
||||
|
|
|
@ -62,10 +62,50 @@ typedef struct _vec2
|
|||
float y;
|
||||
} vec2;
|
||||
|
||||
#define KEY_MOTION(lateral, camera) \
|
||||
#define KEY_MOTION(way) \
|
||||
{ \
|
||||
lateral_motion_indicator = lateral; \
|
||||
camera_move = camera; \
|
||||
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, \
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue