文章目錄
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