溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

AGG第三十二課 renderer_outline_aa更快的渲染線段算法

發布時間:2020-06-06 11:52:09 來源:網絡 閱讀:535 作者:fengyuzaitu 欄目:系統運維

留給:曾經在校園奔跑時候,摔破膝蓋,擦傷手掌的孩子!

前言  

       本章提供了采用新的線段渲染算法的例子,相比于已經實現的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"

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<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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女