本章提供了采用新的線段渲染算法的例子,相比于已經實現的stroke管道算法,平均提高了2倍的速度,最好的情況下是2.6倍加速度。當然這種算法應用在細線上速度才會快,最好是小于2個像素。
在其他的章節中會跟conv_stroke進行效率的對比。同樣的避免不了引入更多的限制,這一點可以在下面了解到。多說一句:conv_stroke是最昂貴的轉換器。
The rasterizer itself works much faster, besides, in this case you won't need to use the most expensive converter, that is, conv_stroke.
#include"agg/include/agg_rasterizer_outline_aa.h"
#include"agg/include/agg_renderer_outline_aa.h"
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)當然都說是渲染線段的算法,自然就不會渲染點了。
1)簡單實例
agg::rendering_buffer&rbuf = rbuf_window();
agg::pixfmt_bgr24 pixf(rbuf);
typedef agg::renderer_outline_aa<agg::pixfmt_bgr24> renderer_type;
agg::line_profile_aa profile;
profile.width(5);//設置線寬
renderer_type ren(pixf,profile);
typedef agg::rasterizer_outline_aa<renderer_type> 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<agg::pixfmt_bgr24> 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<renderer_type> 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<agg::pixfmt_bgr24> 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<renderer_type> 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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。