static Eina_Bool _animate_obj(void *data) { obj_animation_parameter += obj_animation_velocity; float oap = obj_animation_parameter/200; evas_canvas3d_node_scale_set((Evas_Canvas3D_Node *)data, oap, oap, oap); evas_canvas3d_node_orientation_angle_axis_set((Evas_Canvas3D_Node *)data, obj_animation_parameter, 0.0, 1.0, 0.0); if (obj_animation_parameter >= 360.0 || obj_animation_parameter <= 0.0) obj_animation_velocity *= -1.0; return EINA_TRUE; }
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; }
void _scale(Evas_Canvas3D_Node *node, Evas_Real scale) { eo_do(node, evas_canvas3d_node_scale_set(1.0 * scale, 1.0 * scale, 1.0 * scale)); }