網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對木制涼亭等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)成都網(wǎng)站營銷優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。
最大的參考價值,作者在AGG庫下的example目錄中,創(chuàng)建了很多win32的測試用例,創(chuàng)建使用的是VC6.0的工程,目前采用VS2005,可以輕松的進行工程的導(dǎo)入。初學(xué)者可以簡單的使用。進入agg\examples\win32_api目錄,點擊example.dsw,允許進行工程的導(dǎo)入,就OK了。接下來會對每一個例子進行詳細的應(yīng)用剖析。
??
??
多邊形集合算法,后面剖析一二?。?/p>
這是一個非常重要的文件夾,里面包含有三個文件夾和一堆的頭文件:ctrl,platform(作者在這里封裝了系統(tǒng)的函數(shù),提供了一種簡單測試AGG的方式),util.大部分的頭文件都是完整的包含類的聲明和實現(xiàn),受到模塊類定義的限制,
該目錄下的源碼文件有vcgen,trans等,不明所以,還有platform
util等文件夾,對應(yīng)于每一個平臺的實現(xiàn)文件。
rendering buffer (frame buffer我們可以理解為顯存)存儲一塊連續(xù)的內(nèi)存區(qū)域,不知道自身具體存儲內(nèi)容的結(jié)構(gòu),只按照行的長度,向外提供行指針,有寬、高、步長屬性。
spanrender 水平區(qū)段繪制器,用于繪制scanline中的段,與renderingbuffer直接交互,將scanline的內(nèi)容映射到顯存中。
outline輪廓線,將矢量數(shù)據(jù)轉(zhuǎn)化為點陣格式 rasterizer內(nèi)部類。
scanline將點陣格式的點集合,轉(zhuǎn)化成為renderer使用的水平區(qū)段。
renderer將點陣數(shù)據(jù)填上顏色放入顯存中
rasterizer柵格器,用于轉(zhuǎn)化上層的矢量數(shù)據(jù)到柵格集合中。
Vectortransitions 矢量變化,一個復(fù)雜的集合對應(yīng)著n多convs 對點集合的操作。
一個比方來介紹AGG里面的一組關(guān)系,rasterizer,scanline,和renderer之間的關(guān)系.它們就如同你在黑板面前拿著一本一冊,用粉筆畫黑板報.那本畫冊就是rasterizer,他存儲圖形,黑板套裝(包括粉筆)就是我們的renderer,而你就是中間的scanline. AGG中就是通過scanline把rasterizer中存放的柵格信息用粉筆pixfmt_renderer轉(zhuǎn)化到黑板rendering_buffer中,完成最終的繪制.
變量定義:float 還是double類型
實際上,這來源于C/C++對float和double類型的處理方法。如果你定義一個類似如下的函數(shù):
void foo(float x, float y) ,傳遞的參數(shù)值永遠都是double類型。除此之外,在矩陣變換中,使用double類型是最合理的,因為采用float類型,只能夠顯示7到10位小數(shù)點,遇到精度的計算錯誤是難以避免的。因此C/C++采用double類型,那是再自然不過的選擇。
凡是有例外,我還是非常贊同在頂點源中使用float類型,例如: agg::path_storage,還有其他的轉(zhuǎn)換器保存了大量的頂點數(shù)組(agg::conv_stroke)。交叉使用double和float類型,會導(dǎo)致問題更加復(fù)雜。
v是vertex的縮寫,g是generator的縮寫。
歷史從agg_gen_xxxx到agg_cgen_xxxx到agg_vcgen_xxxx
“vcgen”是”VertexaccCumulating Generators”的縮寫
"vpgen" 是"Vertex Pass-through Generator"的縮寫
affine_matrix à trans_affine
viewport àtrans_viewport
I also would like to rename some classesand files, particulary agg_gen_xxxx to
agg_cgen_xxxx (where 'c' refers to"Cumulating" generators), there're also will
be agg_pgen_xxxxx refering to"Pass-through" generators. First ones acculumate
vertices of the whole contour (not path)before generating the path, the last
ones are fed with vertices and then askedto produce some other vertices on
demand. A typical example of thePass-through generator is Liang-Barski polygon
clipper.
Also, for the sake of consistency I'd liketo rename affine_matrix to
trans_affine, because there are trans_perspective,trans_bilinear, and
trans_warp_magnifier.
>
> > Or just:
> >
> > agg::rasterizer_fill
> > agg::rasterizer_fill_aa
> > agg::rasterizer_line
> > agg::rasterizer_line_aa
> >
> > It's shorter but maybe a bit less clear.
>
> If you want to fit the PostScript naming, maybe you could use:
>
> agg::rasterizer_fill...
> agg::rasterizer_stroke...
I like these also.
>
> > So, what is your vote: solid/outline, scanline/outline
> > of fill/line?
>
My preference in order would be:
1) rasterizer_fill/stroke
2) rasterizer_fill/line
rendering buffer (frame buffer 我們可以理解為顯存)存儲一塊連續(xù)的內(nèi)存區(qū)域,不知道自身具體存儲
內(nèi)容的結(jié)構(gòu),只按照行的長度,向外提供行指針,有寬、高、步長屬性。
spanrender 水平區(qū)段繪制器,用于繪制scanline中的段,與rendering buffer直接交互,將scanline的內(nèi)
容映射到顯存中。
outline 輪廓線,將矢量數(shù)據(jù)轉(zhuǎn)化為點陣格式 rasterizer內(nèi)部類。
scanline將點陣格式的點集合,轉(zhuǎn)化成為renderer使用的水平區(qū)段。
renderer將點陣數(shù)據(jù)填上顏色放入顯存中
rasterizer柵格器,用于轉(zhuǎn)化上層的矢量數(shù)據(jù)到柵格集合中。
Vectortransitions 矢量變化,一個復(fù)雜的集合對應(yīng)著n多convs 對點集合的操作。
cw(clockwise):順時針
ccw( counter-clockwise):逆時針
flip_y翻轉(zhuǎn)y軸,來自于某些操作系統(tǒng)對于渲染緩存的y軸坐標的方向問題(windows,BeOS系統(tǒng))
6)
premultiplied pre是預(yù)先的意思,而multiply是乘法的意思,按照字面上的理解就是預(yù)先乘以,簡稱預(yù)乘,對于一些圖片雖然提供了alpha通道的值,但是所有的RGB分量都是已經(jīng)乘以alpha通道得到的值,這樣子,就可以在進行圖片的疊加顯示(專業(yè)術(shù)語是混合),減少了一道工序。
以前 color = alpha*A+(1-alpha)*B
現(xiàn)在 color = A * (1-alpha)*B