static void _set_geometry_to_mesh_from_eet_file(Evas_Canvas3D_Mesh *mesh, Evas_Canvas3D_Mesh_Eet *eet_mesh) { float *pos, *nor, *tex; int stride_pos, stride_nor, stride_tex, j; evas_canvas3d_mesh_vertex_count_set(mesh, eet_mesh->geometries->vertices_count); evas_canvas3d_mesh_vertex_assembly_set(mesh, EVAS_CANVAS3D_VERTEX_ASSEMBLY_TRIANGLES); evas_canvas3d_mesh_frame_add(mesh, 0); evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION, 0, NULL); evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL, 0, NULL); evas_canvas3d_mesh_frame_vertex_data_copy_set(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD, 0, NULL); pos = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION); nor = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL); tex = (float *)evas_canvas3d_mesh_frame_vertex_data_map(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD); stride_pos = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION); stride_nor = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL); stride_tex = evas_canvas3d_mesh_frame_vertex_stride_get(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD); if (stride_pos == 0) stride_pos = sizeof(float) * 3; if (stride_nor == 0) stride_nor = sizeof(float) * 3; if (stride_tex == 0) stride_tex = sizeof(float) * 2; /* set data to vertex buffer */ for (j = 0; j < eet_mesh->geometries->vertices_count; j++) { float *p, *n, *t; p = (float *)((char *)pos + stride_pos * j); n = (float *)((char *)nor + stride_nor * j); t = (float *)((char *)tex + stride_tex * j); p[0] = eet_mesh->geometries->vertices[j].position.x; p[1] = eet_mesh->geometries->vertices[j].position.y; p[2] = eet_mesh->geometries->vertices[j].position.z; n[0] = eet_mesh->geometries->vertices[j].normal.x; n[1] = eet_mesh->geometries->vertices[j].normal.y; n[2] = eet_mesh->geometries->vertices[j].normal.z; t[0] = eet_mesh->geometries->vertices[j].texcoord.x; t[1] = eet_mesh->geometries->vertices[j].texcoord.y; } /* unmap vertex buffer */ evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_POSITION); evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_NORMAL); evas_canvas3d_mesh_frame_vertex_data_unmap(mesh, 0, EVAS_CANVAS3D_VERTEX_ATTRIB_TEXCOORD); }
Eina_Bool _mesh_aabb(Evas_Canvas3D_Mesh **mesh, Scene_Data *scene, int index) { Evas_Real x0, y0, z0, x1, y1, z1, r; Evas_Canvas3D_Node *node = NULL; if (fmod(index, 12) == 0) node = scene->mesh_node_warrior; else if (fmod(index, 12) == 1) node = scene->mesh_node_eagle; else if (fmod(index, 12) == 2) node = scene->mesh_node_grass; else if (fmod(index, 12) == 3) node = scene->mesh_node_soldier; else if (fmod(index, 12) == 4) node = scene->mesh_node_tommy; else if (fmod(index, 12) == 5) node = scene->mesh_node_gazebo; else if (fmod(index, 12) == 6) node = scene->mesh_node_carpet; else if (fmod(index, 12) == 7) node = scene->mesh_node_wall[0]; else if (fmod(index, 12) == 8) node = scene->mesh_node_wall[1]; else if (fmod(index, 12) == 9) node = scene->mesh_node_column[1]; else if (fmod(index, 12) == 10) node = scene->mesh_node_column_c; else if (fmod(index, 12) == 11) node = scene->mesh_node_snake; eo_do(node, evas_canvas3d_node_bounding_sphere_get(&x0, &y0, &z0, &r)); eo_do(scene->mesh_node_ball, evas_canvas3d_node_scale_set(r, r, r), evas_canvas3d_node_position_set(x0, y0, z0)); eo_do(node, evas_canvas3d_node_bounding_box_get(&x0, &y0, &z0, &x1, &y1, &z1)); float vertixes[] = { x0, y0, z1, 0.0, 0.0, 1.0, x0, y1, z1, 0.0, 0.0, 1.0, x1, y1, z1, 0.0, 0.0, 1.0, x1, y0, z1, 0.0, 0.0, 1.0, x0, y0, z0, 0.0, 0.0, -1.0, x1, y0, z0, 0.0, 0.0, -1.0, x0, y1, z0, 0.0, 0.0, -1.0, x1, y1, z0, 0.0, 0.0, -1.0, x0, y0, z0, -1.0, 0.0, 0.0, x0, y1, z0, -1.0, 0.0, 0.0, x0, y0, z1, -1.0, 0.0, 0.0, x0, y1, z1, -1.0, 0.0, 0.0, x1, y0, z0, 1.0, 0.0, 0.0, x1, y1, z0, 1.0, 0.0, 0.0, x1, y1, z1, 1.0, 0.0, 0.0, x1, y0, z1, 1.0, 0.0, 0.0, x0, y1, z0, 0.0, 1.0, 0.0, x1, y1, z0, 0.0, 1.0, 0.0, x0, y1, z1, 0.0, 1.0, 0.0, x1, y1, z1, 0.0, 1.0, 0.0, x0, y0, z0, 0.0, -1.0, 0.0, x1, y0, z0, 0.0, -1.0, 0.0, x1, y0, z1, 0.0, -1.0, 0.0, x0, y0, z1, 0.0, -1.0, 0.0 }; unsigned short indixes[] = { 0, 1, 2, 3, 1, 2, 0, 3, 4, 5, 5, 7, 7, 6, 6, 4, 8, 9, 9, 11, 11, 10, 10, 8, 12, 13, 13, 14, 14, 15, 15, 12, 16, 17, 17, 19, 19, 18, 18, 16, 20, 21, 21, 22, 22, 23, 23, 20 }; if (*mesh) { eo_do(*mesh, evas_canvas3d_mesh_vertex_assembly_set(EVAS_CANVAS3D_VERTEX_ASSEMBLY_LINES), evas_canvas3d_mesh_frame_vertex_data_copy_set(0, EVAS_CANVAS3D_VERTEX_POSITION, 6 * sizeof(float), &vertixes[ 0]), evas_canvas3d_mesh_index_data_copy_set(EVAS_CANVAS3D_INDEX_FORMAT_UNSIGNED_SHORT, 48, &indixes[0])); return EINA_TRUE; } return EINA_FALSE; }