千家信息网

AGG第三十二课 renderer_outline_aa更快的渲染线段算法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,留给:曾经在校园奔跑时候,摔破膝盖,擦伤手掌的孩子!1 前言本章提供了采用新的线段渲染算法的例子,相比于已经实现的stroke管道算法,平均提高了2倍的速度,最好的情况下是2.6倍加速度。当然这种算法
千家信息网最后更新 2026年11月03日AGG第三十二课 renderer_outline_aa更快的渲染线段算法

留给:曾经在校园奔跑时候,摔破膝盖,擦伤手掌的孩子!

1 前言

本章提供了采用新的线段渲染算法的例子,相比于已经实现的stroke管道算法,平均提高了2倍的速度,最好的情况下是2.6倍加速度。当然这种算法应用在细线上速度才会快,最好是小于2个像素。

在其他的章节中会跟conv_stroke进行效率的对比。同样的避免不了引入更多的限制,这一点可以在下面了解到。多说一句:conv_stroke是最昂贵的转换器。

The rasterizer itself works much faster, besides, in this case you won'tneed to use the most expensive converter, that is, conv_stroke.


2 头文件

#include"agg/include/agg_rasterizer_outline_aa.h"

#include"agg/include/agg_renderer_outline_aa.h"

3限制

1)最大的线宽已经被硬编码了,最大值是128个像素,在agg::line_interpolator_aa_base类中

定义,声明的变量是max_half_width.

2)线段的链接方式只能是miter.如果渲染的线比较厚,并且线与线之间的夹角非常尖锐,线段之间的连接方式可能就没有conv_stroke生成的准确。虽说在渲染厚线的时候不是要求太苛刻

3)线段端点的行传只能够是butt_cap或者round_cap.除此之外,butt_cap不是抗锯齿的。round_cap看起来好些,但是影响性能,尤其是你渲染虚线的时候(虚线占6像素,间距是3像素,大概慢1.5倍)

如果渲染长线,那就不需要那么苛刻。调用agg::rasterizer_outline_aa::round_cap(true/false)设置。

4)在渲染一些小的图形轮廓线,效果不是很好。但是在渲染地图,字符,图像,oscilloscopes等表现的也已经很完美了。

5)当然都说是渲染线段的算法,自然就不会渲染点了。

4代码实例

1)简单实例

agg::rendering_buffer&rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);

typedef agg::renderer_outline_aa renderer_type;

agg::line_profile_aa profile;

profile.width(5);//设置线宽

renderer_type ren(pixf,profile);

typedef agg::rasterizer_outline_aa rasterizer_type;

rasterizer_type ras(ren);

ren.color(agg::rgba8(255,0,0));//设置线段的颜色

ras.move_to_d(100,100);

ras.line_to_d(500,500);

ras.render(false);

2)可供选择

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);


typedef agg::renderer_outline_aa renderer_type;

agg::line_profile_aa profile;

profile.gamma(agg::gamma_power(1.2));//可选

profile.min_width(0.75);//可选

profile.smoother_width(0);//可选

profile.width(5);//强制性,要求设置线宽

renderer_type ren(pixf,profile);


typedef agg::rasterizer_outline_aa rasterizer_type;

rasterizer_type ras(ren);

ras.round_cap(false);//设置线段端点行传可选

ren.color(agg::rgba8(255,0,0));//设置颜色,可选

ras.move_to_d(100,100);

ras.line_to_d(500,500);

ras.line_to_d(300,400);

ras.render(false);//强制性,是否围成闭合的曲线,false绘制折线

3)调用add_path添加顶点源,可以不调用ras.render

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);


typedef agg::renderer_outline_aa renderer_type;

agg::line_profile_aa profile;

profile.gamma(agg::gamma_power(1.2));//可选

profile.min_width(0.75);//可选

profile.smoother_width(0);//可选

profile.width(5);//强制性要求设置线宽

renderer_type ren(pixf,profile);


typedef agg::rasterizer_outline_aa rasterizer_type;

rasterizer_type ras(ren);

ras.round_cap(false);////可选

ren.color(agg::rgba8(255,0,0));//可选

agg::path_storage ps;

ps.move_to(600,600);

ps.line_to(600,100);

ras.add_path(ps);


邮件的详细信息:

http://sourceforge.net/p/vector-agg/mailman/vector-agg-general/?viewmonth=200309&page=1


线段 算法 像素 强制性 时候 速度 强制 最大 苛刻 之间 实例 方式 最好 端点 虚线 颜色 限制 尖锐 昂贵 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是不是新科技 互联网科技公司有哪些 深圳卡尔迅互联网科技有限公司怎么样 汉立互联网科技有限公司联系电话 科技赋能互联网健康 剑昆互联网络科技有限公司临桂 浙江互联网科技研学营 杭州壁岐互联网科技有限公司 玉溪互联网科技怎么选 如何创新互联网科技 高科技互联网套路 互联网金融科技公司的优势 风投北京互联网科技 江苏互联网科技小贷 普陀区互联网教育科技管理办法 互联网公司属于科技吗 互联网科技职业技能培训学校 互联网科技创新创业项目 现代科技的标志之一的互联网 科技美学互联网 艺术 互联网科技公司经营范围 科技互联网龙头 世界互联网领先科技成果 互联网之后的科技是什么 互联网金融中的现代科技 互联网公司科技股 卓翼科技产业互联网合作 中天科技中国工业互联网 数字互联网科技有限公司 互联网科技博主张洲
0