引言:在刚开始的时候对agg::conv_stroke不了解,认为她与agg::conv_dash是一路的货色,并且分别代表实线和虚线,其实不然,agg::conv_stroke此类存储线的位置,宽度,线端点形状,线连接方式等信息 ,通过使用虚线渲染圆,充分理解了,她们之间如何配合使用。
小节一:虚线的使用方法
例子如下:
//Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵 //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标 //第三个参数是圆形的X半径,第四个参数是圆形的Y半径 //根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形, //不一定就是一个规规矩矩的圆形 agg::ellipse ell(200,200,50,100); //使用虚线 typedef agg::conv_dash<agg::ellipse> ell_cd_type; ell_cd_type cdccell(ell); cdccell.add_dash(5,5); typedef agg::conv_stroke<ell_cd_type> ell_cc_cs_type; ell_cc_cs_type csccell(cdccell); ras.add_path(csccell); rensl.color(agg::rgba8(255,0,0)); agg::render_scanlines(ras,sl,rensl); ras.reset();
通过构建agg::conv_dash模板,然后创建给agg::conv_stroke实现了虚线的描绘。
小节二:放缩,偏移,旋转的转换
//Vertex Source顶点源,我更喜欢称之为端点集合,或者点集合矩阵 //第一个参数是圆形圆心的X坐标,第二个参数是圆形圆心的Y坐标 //第三个参数是圆形的X半径,第四个参数是圆形的Y半径 //根据第三和第四个参数可以了解到圆形可以是一个扁平的圆形, //不一定就是一个规规矩矩的圆形 agg::ellipse ell(200,200,50,100); //坐标转换 agg::trans_affine mtx; mtx.scale(0.5,1); //x轴缩小到原来的一半 mtx.rotate(agg::deg2rad(30));//旋转30度 mtx.translate(200,200);//X,Y坐标分别平移100 typedef agg::conv_transform<agg::ellipse> ell_ct_type; ell_ct_type ctell(ell,mtx); //矩阵变换 typedef agg::conv_dash<ell_ct_type> ell_cd_type; ell_cd_type cdccell(ctell); cdccell.add_dash(5,5); typedef agg::conv_stroke<ell_cd_type> ell_cc_cs_type; ell_cc_cs_type csccell(cdccell);
摘自:http://www.cnblogs.com/CoolJie/archive/2011/04/27/2030122.html
在这个例子中,发现很多的文章引入:agg::conv_contour,事实上去掉该东西,对于渲染也没有任何的影响,从这里可以看出AGG是一个非常松散的渲染工具,她提供了很多的工具,但是你可以很简单的渲染,也可以进行一系列的转换。
变换矩阵是一个非常不错的东西,核心是对坐标进行一系列的转换,实际上,当我们构建一个形状例如圆形,实际上AGG已经知道了所有形成的点坐标,然后对点的坐标进行操作。
注:trans_affine不 仅仅用于源顶点的变换,在AGG库中有不少地方都能看到它。比如后面会讲到的线段(span)生成器,通过变换矩阵,就能够 自由变换填充于多边形之内的图案。
时间: 2024-10-22 10:57:27