• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            AGG入門(八) - 渲染

            一、引言

            讓我們來(lái)看一看渲染具體的流程圖吧:

            上面提到了幾個(gè)概念,再解釋一下:
            • 頂點(diǎn)源(Vertex Source):用頂點(diǎn)的方式描述矢量圖形;
            • 光柵化(Resterizer):它的作用是把頂點(diǎn)源所描繪的圖形與像素對(duì)應(yīng)起來(lái),可以說(shuō)類似于Photoshop上的矢量蒙版;
            • 掃描線(Scanline):掃描線的作用就是為掃描線渲染器提供一個(gè)掃描的方式和區(qū)域,使渲染器有序地填充;
            • 掃描線渲染器(Scanline Renderer):分實(shí)色和自定義渲染器兩類,實(shí)色只允許你用單一的顏色去進(jìn)行渲染,而自定則可做得多姿多彩,比如漸變、位圖;它相當(dāng)于GDI里的畫刷。

            二、工作

            這次我們以一個(gè)自制的頂點(diǎn)源與橢圓組合作為渲染對(duì)象,用寶藍(lán)色的實(shí)色渲染器進(jìn)行渲染;

            #include <agg_ellipse.h>

            //................

            class triangle_path {
            public:
                triangle_path()
                {
                    unsigned tmp_array[4][3]={
                        {0  , 250, agg::path_cmd_move_to},
                        {500, 250, agg::path_cmd_line_to},
                        {250, 500, agg::path_cmd_line_to},
                        {0  ,   0, agg::path_cmd_stop}
                    };
                    memcpy(m_points[0], tmp_array[0], sizeof(m_points));
                }
                unsigned vertex(double *x, double* y)
                {
                    *x = m_points[m_step][0];
                    *y = m_points[m_step][1];
                    unsigned r = m_points[m_step][2];
                    m_step++;
                    return r;
                }
                void rewind(int)
                {
                    m_step = 0;
                }
            private:
                int m_step;
                unsigned m_points[4][3];
            };

            //...... in class the_application

                void on_draw()
               {
                    ren_bas.reset_clipping(true);
                    ren_bas.clear(agg::rgba8(255, 255, 255));
             
                    agg::ellipse ellipse(250, 125, 125, 125);
                    triangle_path triangle;
                    rasterizer.reset();
                    rasterizer.add_path(triangle);
                    rasterizer.add_path(ellipse);
                    agg::render_scanlines_aa_solid(rasterizer, scanline, ren_bas,
                        agg::rgba8(45, 108, 155));  //注意:函數(shù)名中的scanline是復(fù)數(shù)?。?/span>
                }

            三、解釋

            先看on_draw函數(shù):我們先定義了兩個(gè)頂點(diǎn)源,一個(gè)是橢圓,另一個(gè)是自制的三角形;先把rasterizer重置,清除上次重繪留下的光柵信息;我們?cè)僭诠鈻胖刑砑舆@兩個(gè)頂點(diǎn)源,用渲染器渲染,就是了;
            你可能感到奇怪:為什么沒有掃描線渲染器的定義呢?其實(shí)在render_scanlines_aa_solid里,就已經(jīng)幫你定義好了實(shí)色渲染器。把render_scanlines_aa_solid展開成:
            agg::renderer_scanline_aa_solid<agg::renderer_base<agg::pixfmt_rgb24>> renderer_scanline(ren_bas);
            renderer_scanline.color(agg::rgba8(45, 108, 155, cover));
            agg::render_scanlines(rasterizer, scanlines, renderer_scanline);
            效率是一樣的,只不過(guò)函數(shù)版本更加簡(jiǎn)潔。
            頂點(diǎn)源的定義,結(jié)合上一節(jié)的知識(shí)和agg_basics.h中關(guān)于path_commands_e和path_flags_e的定義,應(yīng)該是可以理解的;

            posted on 2012-08-01 20:01 Shihira 閱讀(3542) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 圖形編程

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            留言簿(2)

            隨筆分類

            搜索

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久亚洲精品人成综合网| 久久精品免费大片国产大片| 国产99久久久久久免费看| 嫩草影院久久99| 久久久久国产精品熟女影院| 国产一区二区三区久久精品| 久久夜色精品国产亚洲| …久久精品99久久香蕉国产| 精品久久人人妻人人做精品| 日韩乱码人妻无码中文字幕久久 | 精品久久国产一区二区三区香蕉| 久久综合鬼色88久久精品综合自在自线噜噜 | 人人狠狠综合88综合久久| 久久婷婷五月综合国产尤物app| 国产精品久久久天天影视| 日日狠狠久久偷偷色综合免费| 91麻精品国产91久久久久| 久久笫一福利免费导航| 精品久久久久久久中文字幕 | 国产一区二区精品久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 午夜精品久久久久| 欧美亚洲国产精品久久蜜芽 | 久久综合视频网站| 久久er国产精品免费观看2| 久久精品天天中文字幕人妻| 精品久久久久久国产| 久久久亚洲欧洲日产国码是AV| 亚洲中文字幕伊人久久无码| 一本久久久久久久| 国产激情久久久久影院小草| 久久精品国产半推半就| 亚洲国产精品一区二区久久| 国产99久久久久久免费看| 久久精品国产99久久丝袜| 中文字幕成人精品久久不卡| 国产精品欧美久久久久天天影视| 久久精品国产亚洲Aⅴ蜜臀色欲| 日韩中文久久| 国产激情久久久久久熟女老人 | 欧美黑人又粗又大久久久|