hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=509304645a38131dfcef5c0cda927d9fa3846a86
commit 509304645a38131dfcef5c0cda927d9fa3846a86 Author: Bogdan Devichev <b.devic...@samsung.com> Date: Tue Apr 7 09:17:23 2015 +0900 evas-3d: blending example uses spheres from primitives Reviewers: Hermet, raster, cedric Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D2162 --- src/examples/evas/evas-3d-blending.c | 94 ++++++------------------------------ 1 file changed, 16 insertions(+), 78 deletions(-) diff --git a/src/examples/evas/evas-3d-blending.c b/src/examples/evas/evas-3d-blending.c index 5e47739..2176fde 100644 --- a/src/examples/evas/evas-3d-blending.c +++ b/src/examples/evas/evas-3d-blending.c @@ -4,18 +4,18 @@ * For more detailes see https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml * * @verbatim - * gcc -o evas-3d-blending evas-3d-blending.c `pkg-config --libs --cflags evas ecore ecore-evas eo`-lm + * gcc -o evas-3d-blending evas-3d-blending.c evas-3d-primitives.c `pkg-config --libs --cflags evas ecore ecore-evas eo`-lm * @endverbatim */ #define EFL_EO_API_SUPPORT #define EFL_BETA_API_SUPPORT -#include <math.h> #include <Eo.h> #include <Evas.h> #include <Ecore.h> #include <Ecore_Evas.h> +#include "evas-3d-primitives.h" #define WIDTH 1024 #define HEIGHT 1024 @@ -71,20 +71,7 @@ typedef struct _Scene_Data Eo *material1; } Scene_Data; -typedef struct _vec3 -{ - float x; - float y; - float z; -} vec3; - -typedef struct _vec4 -{ - float x; - float y; - float z; - float w; -} vec4; +static const vec2 tex_scale = {1, 1}; Evas *evas = NULL; Eo *background = NULL; @@ -200,65 +187,11 @@ _light_setup(Scene_Data *data) static void _set_ball(Eo *mesh, int p, Evas_3D_Material *material) { - int vcount, icount, vccount, i, j; - double dtheta, dfi, sinth, costh, fi, theta, sinfi, cosfi; - unsigned short *indices, *index; - - icount = p * p * 6; - vccount = p + 1; - vcount = vccount * vccount; - - dtheta = M_PI / p; - dfi = 2 * M_PI / p; - - vec3 *vertices = malloc(sizeof(vec3) * vcount); - vec3 *normals = malloc(sizeof(vec3) * vcount); - - for (j = 0; j < vccount; j++) - { - theta = j * dtheta; - sinth = sin(theta); - costh = cos(theta); - for (i = 0; i < vccount; i++) - { - fi = i * dfi; - sinfi = sin(fi); - cosfi = cos(fi); - vertices[i + j * vccount].x = sinth * cosfi; - vertices[i + j * vccount].y = sinth * sinfi; - vertices[i + j * vccount].z = costh; - - normals[i + j * vccount].x = sinth * cosfi; - normals[i + j * vccount].y = sinth * sinfi; - normals[i + j * vccount].z = costh; - } - } - - indices = malloc(sizeof(short) * icount); - index = &indices[0]; - - for(j = 0; j < p; j++) - for(i = 0; i < p; i++) - { - *index++ = (unsigned short)(i + vccount * j); - *index++ = i + vccount * (j + 1); - *index++ = i + 1 + vccount * (j + 1); - - *index++ = i + vccount * j; - *index++ = i + 1 + vccount * j; - *index++ = i + vccount * (j + 1) + 1; - } - - eo_do(mesh, evas_3d_mesh_vertex_count_set(vcount), - evas_3d_mesh_frame_add(0); - evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_POSITION, - sizeof(vec3), &vertices[0]); - evas_3d_mesh_frame_vertex_data_set(0, EVAS_3D_VERTEX_NORMAL, - sizeof(vec3), &normals[0]); - evas_3d_mesh_index_data_set(EVAS_3D_INDEX_FORMAT_UNSIGNED_SHORT, - icount , &indices[0]); - evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG); - evas_3d_mesh_frame_material_set(0, material)); + + evas_3d_add_sphere_frame(mesh, 0, p, tex_scale); + eo_do(mesh, + evas_3d_mesh_frame_material_set(0, material), + evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_PHONG)); } static void @@ -291,8 +224,8 @@ _mesh_setup(Scene_Data *data) data->mesh = eo_add(EVAS_3D_MESH_CLASS, evas); data->mesh1 = eo_add(EVAS_3D_MESH_CLASS, evas); - _set_ball(data->mesh, 100, data->material); - _set_ball(data->mesh1, 100, data->material1); + _set_ball(data->mesh, 50, data->material); + _set_ball(data->mesh1, 50, data->material1); data->mesh_node = eo_add(EVAS_3D_NODE_CLASS, evas, @@ -311,8 +244,13 @@ _mesh_setup(Scene_Data *data) eo_do(data->mesh1, evas_3d_mesh_blending_enable_set(EINA_TRUE), evas_3d_mesh_blending_func_set(func1, func2)); + eo_do(data->mesh_node, + evas_3d_node_scale_set(2.0, 2.0, 2.0), + evas_3d_node_orientation_angle_axis_set(90.0, 1.0, 0.0, 0.0)); + eo_do(data->mesh_node1, - evas_3d_node_scale_set(2.5, 2.5, 2.5)); + evas_3d_node_scale_set(5.0, 5.0, 5.0), + evas_3d_node_orientation_angle_axis_set(90.0, 1.0, 0.0, 0.0)); } static void --