previous page: Animating the Cube
Consider using widget to control some aspects of the rendering. For example, use some sliders to control the shape of the cube. Declare 3 sliders to play with the scaling coordinates of the cube.
struct _GLData {
Evas_Object *slx; Evas_Object *sly; Evas_Object *slz;
}
When rendering the GUI, build and show the sliders. Those accept values in a range from 0.0 to 1.5 and control the scaling of each axis of the cube.
// Slider for X-axis scale gld->slx = elm_slider_add(inner_box); evas_object_size_hint_align_set(gld->slx, EVAS_HINT_FILL, 0); elm_slider_horizontal_set(gld->slx, EINA_TRUE); elm_slider_unit_format_set(gld->slx, "%1.2f units"); elm_slider_indicator_format_set(gld->slx, "%1.2f units"); elm_slider_indicator_show_set(gld->slx, EINA_TRUE); elm_slider_min_max_set(gld->slx, 0, 1.5); elm_slider_value_set(gld->slx, 0.75); evas_object_color_set(gld->slx, 0.0, 0.0, 120, 255); elm_box_pack_end(inner_box, gld->slx); evas_object_show(gld->slx); // Slider for Y-axis scale gld->sly = elm_slider_add(inner_box); evas_object_size_hint_align_set(gld->sly, EVAS_HINT_FILL, 0); elm_slider_horizontal_set(gld->sly, EINA_TRUE); elm_slider_unit_format_set(gld->sly, "%1.2f units"); elm_slider_indicator_format_set(gld->sly, "%1.2f units"); elm_slider_indicator_show_set(gld->sly, EINA_TRUE); elm_slider_min_max_set(gld->sly, 0, 1.5); elm_slider_value_set(gld->sly, 0.75); evas_object_color_set(gld->sly, 0.0, 0.0, 120, 255); elm_box_pack_end(inner_box, gld->sly); evas_object_show(gld->sly); // Slider for Z-axis scale gld->slz = elm_slider_add(inner_box); evas_object_size_hint_align_set(gld->slz, EVAS_HINT_FILL, 0); elm_slider_horizontal_set(gld->slz, EINA_TRUE); elm_slider_unit_format_set(gld->slz, "%1.2f units"); elm_slider_indicator_format_set(gld->slz, "%1.2f units"); elm_slider_indicator_show_set(gld->slz, EINA_TRUE); elm_slider_min_max_set(gld->slz, 0, 1.5); elm_slider_value_set(gld->slz, 0.75); evas_object_color_set(gld->slz, 0.0, 0.0, 120, 255); elm_box_pack_end(inner_box, gld->slz); evas_object_show(gld->slz);
Then use the actual the values of sliders and pass them to the scaling function in
the rendering loop, _draw_gl
:
double scalex = elm_slider_value_get(gld->slx); double scaley = elm_slider_value_get(gld->sly); double scalez = elm_slider_value_get(gld->slz); customLoadIdentity(gld->model); customRotate(gld->model, gld->xangle, gld->yangle, gld->zangle++); customScale(gld->model, scalex, scaley, scalez); customMutlMatrix(gld->mvp, gld->view, gld->model);
next page: Implementing Effects