AGG 光柵化(Scanline Rasterizer)

來源:互聯網
上載者:User
文章目錄
  • 掃描線Scanline
  • Rasterizer
Scanline Rasterizer

Scanline Rasterizer能夠把頂點資料轉換成一組水平掃描線,掃描線由一組線段(Span)組成,線段(Span)包含了起始位置、長度和覆蓋率(可以理解 為透明度)資訊。AGG的消除鋸齒(Anti-Aliasing)功能也是在這時引入的。

掃描線Scanline

掃描線是一種儲存span的容器,span用於表示一小條(水平方向)細線。映像中同一行的span組成一個Scanline。

標頭檔
#include <agg_scanline_u.h> // scanline_u8,scanline32_u8#include <agg_scanline_p.h> // scanline_p8,scanline32_p8#include <agg_scanline_bin.h> // scanline_bin,scanline32_bin
類型
scanline_bin,scanline32_bin 不攜帶AA資訊的span容器。scanline32_bin中的32代表座標位元,一般16位已經足夠了,所以前一版 本用得更多些(下同)
scanline_u8,scanline32_u8 unpacked版的span容器,用每個span來儲存各自的線段資訊
scanline_p8,scanline32_p8 packed版的span容器,相同屬性的span會合并成一個
成員類型
struct span; 線段資料,其中的成員變數有:x起始位置,len長度,*covers覆蓋率
typename iterator,const_iterator; span迭代器
typename cover_type; span中covers類型(覆蓋率)
成員方法
iterator begin();
unsigned num_spans();
用於遍曆span,begin()取得指向第一個span的迭代器
num_spans()取得容器中span的數目
void reset(int min_x, int max_x); 設定容器大小
void add_span(int x, unsigned len, unsigned cover) 加入一條線段
void add_cell(int x, unsigned cover) 加入一個點
void add_cells(int x, unsigned len, const cover_type* covers) 加入一組點
void finalize(int y)
int y();
Scanline容器對應的Y座標
Rasterizer

怎麼翻譯呢?光柵化?光柵製造機?嗯~~算了,還是直接叫它Rasterizer(雷死特拉倒)吧-_-!!!

Rasterizer就是把相當於向量資料的一堆頂點和命令轉換成一行行的掃描線的裝置,它就象粉刷工人對照著圖紙把彩漆刷到牆上一 樣。可以說是AGG裡最重要的類型之一,套用建翔兄的話就是:

立功了!立功了!不要給GDI任何的機會!偉大的AGG的Rasterizer類!他了繼承開源社區的光榮傳統!達芬奇、Linus、 唐寅,在這一刻靈魂附體!

Rasterizer是關鍵對象!他代表了AGG偉大的設計理念!在這一刻!他不是一個人的戰鬥!他不是一個人!面對著全世界人民的目 光和期待,他深知責任的重大,0.001秒種之後將會是什麼樣的映像?

標頭檔
#include <agg_rasterizer_scanline_aa.h>
類型
template<class Clip = rasterizer_sl_clip_int> class rasterizer_scanline_aa;
成員方法
template<class GammaF>
void gamma(const GammaF& gamma_function);
設定gamma值。
GammaF為一種仿函數
AGG內建有gamma_power、gamma_none、gamma_threshold、 gamma_linear、gamma_multiply
bool rewind_scanlines(); 跳到第一個scanline位置,同時設定sorted為true。
這時再加入其它頂點會先清空現有頂點
bool navigate_scanline(int y); 跳到y行
bool sweep_scanline(Scanline&); 把當前行畫入Scanline,當下移一行
void reset(); 清空
void move_to(int x, int y);
void line_to(int x, int y);
簡單的畫線功能,單位為1/poly_subpixel_scale
(poly_subpixel_scale一般為256)
void move_to_d(double x, double y);
void line_to_d(double x, double y);
簡單的畫線功能,單位為像素

void add_path(VertexSource& vs, unsigned path_id=0)

 

加入頂點

 

 

作者:毛毛 來源:www.cppprog.com

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.