? mtx.rotate(agg::deg2rad(30)); // 旋转30度 ? mtx.translate(100,100); // 平移100,100
? typedef agg::conv_transform
?? typedef agg::conv_contour
??
?? typedef agg::conv_stroke
得到的图形是:
注:trans_affine不 仅仅用于源顶点的变换,在AGG库中有不少地方都能看到它。比如后面会讲到的线段(span)生成器,通过变换矩阵,就能够 自由变换填充于多边形之内的图案。
坐标转换管道
头文件
#include
#include
#include
类型(演示程序基于基于此处代码)
template
template
变成连续线 构造参数为
VertexSource
width属性决定线宽。
虚线
构造参数为
VertexSource
用add_dash设置虚线长度和间隔
与conv_stroke套用
在例 程的ell_cc_cs_type csccell(ccell); 后面加上csccell.width(3);线宽就会变成3。
// Coordinate conversion pipeline typedef agg::conv_contour
typedef agg::conv_dash
ell_cd_type cdccell(ccell);
cdccell.add_dash(5,5);
typedef agg::conv_stroke
ell_cc_cs_type csccell(cdccell); ...
template
template
template
conv_smooth_poly1_curve;
建立标记
轮廓变换 构造参数为
VertexSource
width属性决定扩展或收缩轮廓。
圆滑过渡多边形各顶点(贝塞尔) 构造参数为
VertexSource
smooth_value属性决定圆滑度(默认为1)
请参考arrowhead示例代码
见例 程代码
在例 程on_draw()方法最后加入下面代码 triangle t(100,100,50);//自定义顶点源
agg::conv_smooth_poly1_curve
ras.add_path(cspct);
agg::render_scanlines_aa_solid( ras,sl,renb,agg::rgba8(255,0,0));
template
template class Curve3 = curve3, class Curve4 = curve4> 圆滑过渡多义线各顶点(贝塞尔) 构造参数为 VertexSource interpolation_step属性决定步长。 可识别VertexSource中的曲线信息 构造参数为VertexSource。 三角形就变得圆头圆脑啦^_^ 在例 程on_draw()方法最后加入下面代码 triangle t(100,100,50); agg::conv_bspline agg::render_scanlines_aa_solid( ras,sl,renb,agg::rgba8(255,0,0)); 三角形也能变得圆头圆脑 例程里的顶点都没有曲线信息,算了, 到后面讲到文字输出时会用到它的。 class conv_curve; conv_smooth_poly1_curve 就是基于它实现的。 见变换矩阵一节的例子 template class conv_transform; 矩阵变换 用变换矩阵重新计算顶点位置 构造参数为 VertexSource和变换矩阵 Scanline Rasterizer Scanline Rasterizer能够把顶点数据转换成一组水平扫描线,扫描线由一组线段(Span)组成,线段(Span)包含了起始位置、长度和覆盖率(可以理解 为透明度)信息。AGG的抗锯齿(Anti-Aliasing)功能也是在这时引入的。 扫描线Scanline 扫描线是一种保存span的容器,span用于表示一小条(水平方向)细线。图像中同一行的span组成一个Scanline。 头文件 #include scanline_bin,scanline32_bin scanline_u8,scanline32_u8 scanline_p8,scanline32_p8 成员类型 struct span; typename 线段数据,其中的成员变量有:x起始位置,len长度,*covers覆盖率 span迭代器 不携带AA信息的span容器。scanline32_bin中的32代表坐标位数,一般16位已经足够了,所以前一版 本用得更多些(下同) unpacked版的span容器,用每个span来保存各自的线段信息 packed版的span容器,相同属性的span会合并成一个