傳說這就是AGG:
要理解這張圖上的幾個概念:
*vertex source: 頂點源。一切的圖像的世界是由點構成的。
*cordinate conversion pipeline: 坐標轉換管道。不用自己去擔心各種坐標系?
*scanline rasterizer: 光柵化,把頂點數據處理合成一組組線段,這里可能會有一些fix或者effect。
*renderers: 渲染器
*rendering buffer: 用于存放像素點的內存
我的理解是這樣:圖像是以點集的方式存在的,要畫圖先是沖一組點集開始,先把這一組點的坐標轉換成目標坐標,然后通過光柵化形成一組線段,然后通過渲染器把這一組線段渲染到buffer上面形成面。點->線段->面
*****************************************************************************************************
一、vertex source
我理解它是一個concept,官方解釋是這個:
所有實現了void rewind(unsigned path_id);和unsigned vertex(double* x, double* y);的類。
agg提供的vertex source concept如下(可以自己擴展):
ellipse 圓
arc 弧線
curve3 curve4 貝塞爾曲線
gsv_text AGG自帶字模的文字輸出(只支持ASCII碼)
gsv_text_outline<> 可變換文字,輸入為gsv_text和變換矩陣
rounded_rect 圓角方形
path_storage 路徑存儲器,可以用join_path方法加入多個頂點源。
arrowhead 箭頭
二、coordinate conversion pipeline
坐標轉換管道用于改變頂點源產生的頂點,包括坐標、命令、產生新頂點等。如對頂點進行矩陣變換、插入頂點形成虛線之類的功能。
1.變化矩陣 trans_affine
頭文件:#include <agg_trans_affine.h>
接口:scale 縮放、rotate旋轉、translate平移、矩陣*乘法、invert取反矩陣
2.坐標轉換管道
template<class VertexSource, class Markers = null_markers> struct conv_stroke;
變成連續線 構造參數為VertexSource width屬性決定線寬。
template<class VertexSource, class Markers = null_markers> struct conv_dash;
虛線
template<class MarkerLocator, class MarkerShapes> class conv_marker;
建立標記
template<class VertexSource> struct conv_contour;
輪廓變換
template<class VertexSource> struct conv_smooth_poly1_curve;
圓滑過渡多邊形各頂點
template<class VertexSource> struct conv_bspline;
圓滑過渡多義線各頂點
template<class VertexSource, class Curve3 = curve3, class Curve4 = curve4> class conv_curve;
可識別VertexSource中的曲線信息
template<class VertexSource, class Transformer = trans_affine> class conv_transform;
矩陣變換 用變換矩陣重新計算頂點位置
三、scanline rasterizer
1.scanline
掃描線是一種保存span的容器,span用于表示一小條(水平方向)細線。圖像中同一行的span組成一個Scanline
2.rasterizer
Rasterizer就是把相當于矢量數據的一堆頂點和命令轉換成一行行的掃描線的設備,它就象粉刷工人對照著圖紙把彩漆刷到墻上一樣
四、renderers
渲染器負責表現掃描線Scanline中的每個線段(span)。在渲染器之前,AGG圖形中的線段是沒有顏色值的,只是位置、長度和覆蓋率(透明度)。渲染器賦于線段色彩,最終成為一幅完整的圖像。
渲染器被分成底中高三層。其中底層負責像素包裝,由PixelFormat Renderer實現;中層是基礎層,在PixelFormat Renderer的基礎上提供更多方法,是所有高層渲染器依賴的基礎,由Base Renderer實現;高層負責渲染Scanline中的線段,由Scanline Renderer等實現。
五、rendering buffer
Rendering Buffer是一個內存塊,用于保存圖像數據。這是AGG與顯示器之間的橋梁,我們要顯示AGG圖形實際上就是識別這個內存塊并使用系統的API顯示出來 而已(實際上幾乎不需要做轉換工作,因為無論是Windows還是Linux,API所用的圖像存儲格式與Rendering Buffer都是兼容的)。
差不多了,其他的東東現在看多了白搭,俺們要在戰斗中學會戰斗,,,