与开罗的Gouraud阴影三角形

时间:2015-07-06 15:21:46

标签: c cairo

我正在尝试使用解释here的方法与开罗一起获得一个Gouraud阴影三角形。

我有以下代码:

cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 240);
cairo_t *cr = cairo_create(surface);

cairo_pattern_t * pattern = cairo_pattern_create_mesh();
cairo_mesh_pattern_begin_patch (pattern);
cairo_mesh_pattern_move_to (pattern, 100, 100);
cairo_mesh_pattern_line_to (pattern, 130, 130);
cairo_mesh_pattern_line_to (pattern, 130,  70);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 0, 1, 0, 0);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 1, 0, 1, 0);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 2, 0, 0, 1);
cairo_mesh_pattern_end_patch(pattern);
cairo_set_source(cr, pattern);
cairo_fill(cr);

cairo_surface_write_to_png (surface,"test.png");

然而,test.png只是黑色。

1 个答案:

答案 0 :(得分:1)

cairo_mesh_pattern_line_to()不会创建实际绘图的几何体。它仅指定模式的发生位置。因此,要实际看到某些内容,您必须使用例如cairo_line_to()

所以这应该有效:

cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 240, 240);
cairo_t *cr = cairo_create(surface);

cairo_pattern_t * pattern = cairo_pattern_create_mesh();
cairo_mesh_pattern_begin_patch (pattern);
cairo_mesh_pattern_move_to (pattern, 100, 100);
cairo_mesh_pattern_line_to (pattern, 130, 130);
cairo_mesh_pattern_line_to (pattern, 130,  70);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 0, 1, 0, 0);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 1, 0, 1, 0);
cairo_mesh_pattern_set_corner_color_rgb(pattern, 2, 0, 0, 1);
cairo_mesh_pattern_end_patch(pattern);
cairo_set_source(cr, pattern);
cairo_move_to(cr, 100, 100);
cairo_line_to(cr, 130, 130);
cairo_line_to(cr, 130, 70);
cairo_fill(cr);

cairo_surface_write_to_png (surface,"test.png");