AGG第十课 agg::conv_stroke 渲染轮廓线
2017-08-31 09:30
302 查看
1前言
轮廓线就是图形的边界,任何封闭的顶点源跳过agg::conv_stroke阶段,将会描绘实心的图形,填充的颜色和边界保持一致。如果不封闭的顶点源一旦跳过agg::conv_stroke就什么也不绘制。agg::conv_stroke就是用来描绘图形边界的。和agg::conv_contour对比可知,agg::conv_contour是扩展图形的轮廓线,通俗一点就是拓展图形的边界,对图形的边界进行放缩(但是和agg::trans_affine不同,这是中心位置不变的缩放)。摘自:McSeemA line is in general more complexobjectthan a polygon. Well, unless it's a simple jagged Bresenham line. All linesareeventually converted into polygons that represent their outlines. So that,inmodern graphics there are no lines,there are *strokes*. And conv_strokedoesthis job2 官方例子
执行examples/conv_stroke例程,提供如下的控制:1)线段端点的切换2)线段之间的连接方式3)线段宽度4)miter limit工件的链接切口3 轮廓线属性的设置
1)线段端点的形状 enum line_cap_e { butt_cap,//按钮形状,实际和方形形状并无二致 square_cap,//设置之后,长度比butt_cap长一些 round_cap//半圆形状};设置函数:voidline_cap(line_cap_e lc)2)线段的宽度设置函数:voidwidth(double w)3)介绍stroke的默认参数当然我们可以不调用line_cap,也可以不调用width,因为stroke有默认的构造器,指定了默认的参数如下: m_width(0.5), m_width_abs(0.5), m_width_eps(0.5/1024.0), m_width_sign(1), m_miter_limit(4.0), m_inner_miter_limit(1.01), m_approx_scale(1.0), m_line_cap(butt_cap), m_line_join(miter_join), m_inner_join(inner_miter)4)agg::conv_stroke的线段样式采用的是实线的渲染方式,是否我们可以通过替换她,描述虚线:agg::conv_dash结果发现:什么也没有渲染出来!!agg::conv_dash会单独描述!!4 例子
ras.reset(); agg::path_storage ps1; ps1.move_to(200,200); ps1.line_to(300,300); agg::line_cap_e cap = agg::round_cap;//设置线段端点的形状 agg::conv_stroke<agg::path_storage> stroke(ps1);//线段的样式 stroke.line_cap(cap); stroke.width(50);//设置线段的宽度 ras.add_path(stroke);agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255,0,0));5 shorten函数的用法
1说明
在conv_stroke和conv_dash对象中添加了缩短路径的方法。对于渲染带粗线的箭头非常有效。同时也有一个agg_conv_shorten_path转换器对象,可以单独使用。2示例
m_slider1(80, 250, 600-10,276, !flip_y) add_ctrl(m_slider1); m_slider1.range(0,300); m_slider1.num_steps(30); m_slider1.value(1); //一种坍塌式的减少过程 agg::ellipse ell1(230,230,140,150); agg::conv_stroke<agg::ellipse> stroke1(ell1); stroke1.width(30); stroke1.shorten(m_slider1.value()); ras.add_path(stroke1); //类似于缩短 agg::path_storage ps; ps.move_to(20,30); ps.line_to(440,30); agg::conv_stroke<agg::path_storage> stroke2(ps); stroke2.width(30); stroke2.shorten(m_slider1.value()); ras.add_path(stroke2);相关文章推荐
- AGG第三十四课 stroke_aa和outline_aa渲染线段效率对比
- AGG第十四课 agg::conv_dash 渲染虚线
- AGG第二十一课 agg::conv_contour 扩展轮廓线
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
- AGG第二十七课 agg::conv_clip_polyline裁剪线区域
- AGG学习之六----完整的渲染流程
- AGG第九课 agg::rendering_buffer 渲染缓存
- AGG第十一课 agg::ellipse 渲染椭圆和多边形
- AGG第二十四课 渲染太极图
- AGG 渲染缓存(Rendering Buffer)
- AGG第十二课 agg::arrowhead 渲染箭头
- Unity3D使用RenderCommand渲染外轮廓
- 主角遮挡渲染轮廓线方案
- AGG第十三课 agg::arc 渲染弧线和扇形
- AGG学习之一----直接操作渲染的内存区
- wxWidgets第十课 渲染字体
- Unity 对选中物体实现描边效果(方法1:指定layer的外轮廓渲染)
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
- 【NPR】漫谈轮廓线的渲染
- AGG第十五课 agg::rounded_rect 渲染圆角矩形