带Cairo的Gouraud着色三角形

带Cairo的Gouraud着色三角形,c,cairo,C,Cairo,我正试图用解释过的方法得到一个有Cairo的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_

我正试图用解释过的方法得到一个有Cairo的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只是黑色。

cairo\u mesh\u pattern\u line\u to()
不会在实际绘制的地方创建几何图形。它只指定模式发生的位置。因此,要真正看到某些东西,必须使用例如
cairo\u line\u 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");

当你在屏幕上画的时候它能用吗?@Jongware:你这是什么意思?我只有一个表面。或者,只叫cairo_paint(cr);填充(cr)不需要路径。