• <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>

            千張筆記

            Email:rain_qian830@163.com
            posts - 28, comments - 42, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            【原】圖形流水線

            Posted on 2008-10-23 22:02 千張 閱讀(1442) 評論(0)  編輯 收藏 引用 所屬分類: 圖形學

            OpenGL的管線(渲染流水線)


            管線這個術語用于描述一種過程,它可能涉及兩個或更多個獨特的階段或步驟。下面的圖來自《OpenGL超級寶典》。


             

                       
                             
            當應用程序中進行OpenGL API調用時,這些命令被放置在一個命令緩沖區(OpenGL Command Buffer)里。這個命令緩沖區最終填滿了命令、頂點數據、紋理數據等東西。當緩沖區被刷新時(或者由程序控制,或者由驅動程序的設計所決定),命令和數據就被傳送給管線的下一個環節。

            通常,頂點數據首先進行轉換和光照(Transform and Lighting)。在轉換階段,描述物體幾何形狀的點被重新計算,以確定這個物體的位置和方向。同時所進行的光照計算將確定每個頂點應該具有的顏色亮度。

            三維圖形是用圖元表示的,如點、線、面等,圖像是用像素表示的,當計算機生成的三維圖形要顯示在我們所看的到的屏幕上時,必須要進行一個轉換,即將圖形轉換成像素表示,這個過程就是光柵化(Rasterization)。

            光柵化后,圖像被放入幀緩沖區(Frame buffer)中。幀緩沖區就是圖形顯示設備的內存,這意味著這幅圖像將會在屏幕上顯示。

            圖中的箭頭表示有一些命令將會跳過轉換和光照階段,例如在屏幕上顯示原始圖像數據(顯示一副圖像)。



            下面我們主要看轉換和光照這個環節,這個環節是一個數學計算密集型階段,是一系列矩陣變換。下圖是頂點轉換管線。

                               
            從原始的頂點數據通往屏幕坐標的路是相當漫長的。上圖提供了這個過程的流程圖,(x,y,z,w)為頂點坐標,w一般為1,(x,y,z,1)表示頂點坐標,(x,y,z,0)表示向量坐標。OpenGL中的矩陣變換都采用這種坐標表示方法,w是縮放因子,一般為1,很少需要修改。

            把頂點與模型視圖矩陣相乘,產生經過轉換的視覺坐標。這個視覺坐標隨后與投影矩陣相乘,產生裁剪坐標,這就有效地消除了可視區之外的所有數據。使用透視投影時,我們需要加入透視出發(persective division),它可以利用均勻坐標的一個屬性。然后,這個裁剪坐標隨后除以w坐標,產生規范化的設備坐標。最后,視口矩陣將可視區內的部分映射到一個“3D視口”上,即窗口坐標(Window coordinates),這是一個2D平面。

            其中,模型視圖矩陣將兩個效果結合在一起:應用到對象的建模變換順序,如平移、旋轉、縮放、剪切等,以及在空間中指定照相機的方向和位置的變換。盡管模型視圖矩陣是實際管道中的一個單矩陣,但也可以將它看成兩個矩陣的乘積:建模矩陣M和視圖矩陣V。首先應用建模矩陣,然后應用視圖矩陣,所以模型視圖矩陣實際上是VM的乘積。

            OpenGL中的視圖

            下面三個函數用于設置建模變換,可修改模型視圖矩陣,執行glMatrixMode(GL_MODEVIEW)之后才可使用它們:
            glScaled(sx,sy,sz);
            glTranslated(dx,dy,dz);
            glRotated(angle,ux,uy,uz);

            照相機定位和瞄準:
            gluLookAt(eyex,eyey,eyez,ax,ay,az,upx,upy,upz);
            這個函數的說明與前面Directx中的LookAt函數的意思一樣。

            投影方式設置:
            glOrtho(left,right,bott,top,near,far);

            glFrustum(left,right,bottom,top,near,far);
            gluPerspective(fovy,aspect,near,far);

            第一個用于設置平行投影,第二個和第三個用于設置透視投影。

            視口變換:
            glViewport(x,y,width,height)
            參數X,Y指定了視圖區域的左下角在窗口中的位置,一般情況下為(0,0),Width和Height指定了視見區域的寬度和高度。一般設置為窗口的Width和Height。


            99精品久久久久久久婷婷| 久久亚洲国产中v天仙www| 香蕉aa三级久久毛片| 精品久久久久久久国产潘金莲| 精品国产乱码久久久久软件| 久久久无码一区二区三区| 91麻精品国产91久久久久| 欧美精品国产综合久久| 国产精品岛国久久久久| 亚洲国产成人乱码精品女人久久久不卡 | 久久亚洲sm情趣捆绑调教 | 亚洲人成网亚洲欧洲无码久久| 久久精品午夜一区二区福利| 色婷婷狠狠久久综合五月| 久久久久人妻一区精品色| 久久天天躁狠狠躁夜夜av浪潮| 99re久久精品国产首页2020| 久久精品综合网| 99久久国产热无码精品免费久久久久| 久久久久久久精品妇女99| 久久国产免费直播| 丁香久久婷婷国产午夜视频| 浪潮AV色综合久久天堂| 大香伊人久久精品一区二区| 九九久久精品国产| 国产69精品久久久久9999| 精品九九久久国内精品| 久久丫精品国产亚洲av不卡| 日产精品久久久久久久| 久久天天躁狠狠躁夜夜av浪潮 | 久久免费视频网站| 国内精品久久久久久野外| 久久亚洲精品无码AV红樱桃| 亚洲va久久久噜噜噜久久狠狠 | 亚洲精品午夜国产va久久| 久久久久国产一区二区| 精品熟女少妇aⅴ免费久久| 久久er国产精品免费观看8| 久久久久成人精品无码| 四虎亚洲国产成人久久精品| 一97日本道伊人久久综合影院|