static void * draw_stuff(int width, int height) { const int petal_count = 3 + random() % 5; const double r1 = 60 + random() % 35; const double r2 = 20 + random() % 40; const double u = (10 + random() % 90) / 100.0; const double v = (random() % 90) / 100.0; cairo_surface_t *surface; cairo_t *cr; int i; double t, dt = 2 * M_PI / (petal_count * 2); double x1, y1, x2, y2, x3, y3; surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, width, height); cr = cairo_create(surface); cairo_translate(cr, width / 2, height / 2); cairo_move_to(cr, cos(t) * r1, sin(t) * r1); for (t = 0, i = 0; i < petal_count; i++, t += dt * 2) { x1 = cos(t) * r1; y1 = sin(t) * r1; x2 = cos(t + dt) * r2; y2 = sin(t + dt) * r2; x3 = cos(t + 2 * dt) * r1; y3 = sin(t + 2 * dt) * r1; cairo_curve_to(cr, x1 - y1 * u, y1 + x1 * u, x2 + y2 * v, y2 - x2 * v, x2, y2); cairo_curve_to(cr, x2 - y2 * v, y2 + x2 * v, x3 + y3 * u, y3 - x3 * u, x3, y3); } cairo_close_path(cr); set_random_color(cr); cairo_fill_preserve(cr); set_random_color(cr); cairo_stroke(cr); cairo_destroy(cr); return surface; }
static void draw_stuff(cairo_surface_t *surface, int width, int height) { const int petal_count = 3 + random() % 5; const double r1 = 60 + random() % 35; const double r2 = 20 + random() % 40; const double u = (10 + random() % 90) / 100.0; const double v = (random() % 90) / 100.0; cairo_t *cr; int i; double t, dt = 2 * M_PI / (petal_count * 2); double x1, y1, x2, y2, x3, y3; cr = cairo_create(surface); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_set_source_rgba(cr, 0, 0, 0, 0); cairo_paint(cr); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); cairo_translate(cr, width / 2, height / 2); cairo_move_to(cr, cos(0) * r1, sin(0) * r1); for (t = 0, i = 0; i < petal_count; i++, t += dt * 2) { x1 = cos(t) * r1; y1 = sin(t) * r1; x2 = cos(t + dt) * r2; y2 = sin(t + dt) * r2; x3 = cos(t + 2 * dt) * r1; y3 = sin(t + 2 * dt) * r1; cairo_curve_to(cr, x1 - y1 * u, y1 + x1 * u, x2 + y2 * v, y2 - x2 * v, x2, y2); cairo_curve_to(cr, x2 - y2 * v, y2 + x2 * v, x3 + y3 * u, y3 - x3 * u, x3, y3); } cairo_close_path(cr); set_random_color(cr); cairo_fill_preserve(cr); set_random_color(cr); cairo_stroke(cr); cairo_destroy(cr); }
void add_face_to_model(t_obj obj, int obj_face[3][3], t_model *model) { t_list *tmp; int i; t_vertex vertex; float random_color[SIZE_RGBA]; i = -1; set_random_color(&random_color); while (++i < 3) { if ((tmp = ft_lstgetone(obj.v, obj_face[i][0] - 1))) ft_memcpy(&vertex.position, tmp->content, sizeof(float [3])); if ((tmp = ft_lstgetone(obj.color, obj_face[i][0] - 1))) ft_memcpy(&vertex.color, tmp->content, sizeof(float [4])); else ft_memcpy(&vertex.color, random_color, sizeof(float [4])); if ((tmp = ft_lstgetone(obj.vt, obj_face[i][1] - 1))) ft_memcpy(&vertex.tex_coord, tmp->content, sizeof(float [2])); else add_zy_vt_to_vertex(&vertex); tmp = ft_lstnew(&vertex, sizeof(t_vertex)); ft_lstadd_back(&model->vertices, tmp); model->v_size++; } }