Anti-Grain Geometry - векторное отсечение
От: _vanger_  
Дата: 21.04.11 17:23
Оценка:
Здравствуйте.

Судя по описанию возможностей AGG, в нём реализована возможность отсечения полигонов, не попадающих в clipping box. Самостоятельно не смог ни разобраться, ни нагуглить.
К примеру, в нижеприведённом коде строчка

path.move_to( 10000, 10000 ); path.line_to( 10000, 100001 );

замедляет выполнение более чем в 10 раз. Видимо, из-за того, что рендерер обрабатывает каждый пиксель этой мегалинии, вместо того, чтобы сразу отсечь её, как заведомо не попадающую в растр. Как это сделать средствами AGG?

void drawPolyLine( unsigned char* pixels, unsigned int width, unsigned int height, list<Point>& points )
{
    rendering_buffer        rbuf( pixels, width, height, width * 3 );

    pixfmt_rgb24            pixf( rbuf );
    renderer_base<pixfmt_rgb24>    renderer( pixf );


    rasterizer_scanline_aa<>    ras;
    scanline_p8            sl;
    path_storage            path;

    list<Point>::iterator p = points.begin();
    path.move_to( p->x, p->y );
    for( ++p; p != points.end(); ++p )
    {
        path.line_to( p->x, p->y );
    }
    path.move_to( 10000, 10000 ); path.line_to( 10000, 100001 );

    conv_stroke<path_storage> stroke( path );
    stroke.line_join( round_join );
    stroke.line_cap( round_cap );
    stroke.width( 5 );

    ras.add_path( stroke );

    render_scanlines_aa_solid( ras, sl, renderer, rgba(1,0.5,0.5) );
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.