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

            天行健 君子當自強而不息

            繪制流水線(1)

            這次主題是渲染管線。它是用來創建為3D世界進行幾何描述的2D圖形并設定一個虛擬照相機確定這個世界中哪一部分將被透視投影到屏幕上。

            \

            2.1表現模型

            一個場景是多個物體或模型的集合。一個物體可以用三角形網格(triangle mesh)來近似表示,如圖2.2所示。由三角形網格建立一個物體,我們稱之為建模。3D世界中最基本的圖元就是三角形,但是Direct3D也支持點圖元和線圖元但我們都不常用到。

             

             

            一個多邊形的兩邊相交的點叫做頂點。為了描述一個三角形,我們通常指定三個點的位置來對應三角形的三個頂點(如圖2.3),這樣我們就能夠很明確的表示出這個三角形了。

             

            2.1.1 頂點格式

            我們以前定義的點在數學上來說是正確的,但是當我們在Direct3D環境中使用它的時候就會覺得很不完善。這是因為在Direct3D中的頂點包含了許多附加的屬性,而不再單純的只有空間位置的信息了。例如:一個頂點可以有顏色和法線向量屬性。Direct3D讓我們可以靈活的構造自己的頂點格式。換句話說,我們可以自己定義頂點的成員。

            為了創建一個自定義的頂點結構,我們首先要創建一個包含能存放我們選擇的頂點數據的結構。例如,下面我們舉出兩種不同頂點數據類型的例子,一種包含了位置和顏色信息,第二種則包含了位置,法線向量,紋理坐標信息。

             

            struct ColorVertex

            {

                   float _x, _y, _z; // 位置

                   DWORD _color; // 顏色

            };

             

            struct NormalTexVertex

            {

                   float _x, _y, _z; // 位置

                   float _nx, _ny, _nz; // 法線向量

                   float _u, _v; // 紋理坐標

            };

            一旦我們有了完整的頂點格式,我們就要使用靈活頂點格式(FVF)的組合標志來描述它。例如第一個頂點結構,我們要使用如下的頂點格式:

            #define FVF_COLOR (D3DFVF_XYZ | D3DFVF_DIFFUSE)

            上面的頂點結構表明它包含位置和顏色屬性。

             

            而第二種結構則要使用:

            #define FVF_NORMAL_TEX (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1)

            上面的頂點結構表明它包含了位置,法線向量,紋理坐標的屬性(這些常量是D3D內置的)。

             

            有一點要注意,你的標志的順序必須要和你的頂點結構的順序一一對應。如果想知道所有的D3DFVF標志,請查閱SDK文檔。

             

            2.1.2 三角形

            三角形是構建3D物體的基本圖形。為了構造物體,我們創建了三角形列表(triangle list)來描述物體的形狀和輪廓。三角形列包含了我們將要畫的每一個三角形的數據信息。例如為了構造一個矩形,我們把它分成兩個三角形,如圖2.4所示,最后指定每個三角形的頂點。

             

             

            Vertex rect[6] = {v0, v1, v2, // 三角形0

                                        v0, v2, v3}; // 三角形1

            注意:指定三角形頂點的順序是很重要的,將會按一定順序環繞排列。

             

            2.1.3 索引

            3D物體中的三角形經常會有許多共用頂點。如圖2.4所表示的矩形。雖然現在僅有兩個點被重復使用,但是當要表現一個更精細更復雜的模型的時候,重復的頂點數將會變得很大。例如圖2.5所示的立方體,僅有八個頂點,但是當用三角形列表示它的時候,所有的點都被重復使用。

             

             

            為了解決這個問題,我們引入索引(indices)這個概念。它的工作方式是:我們創建一個頂點列表和一個索引列表(index list)。頂點列表包含所有不重復的頂點,索引列中則用頂點列中定義的值來表示每一個三角形的構造方式。回到那個矩形的示例上來,它的頂點列表的構造方式如下:

            Vertex vertexList[4] = {v0, v1, v2, v3};

             

            索引列表則定義頂點列中的頂點是如何構造這兩個三角形的:

            WORD indexList[6] = {0, 1, 2, //三角形0

                                        0, 2, 3}; //三角形1

            也就是說,用頂點列表中的0(vertexList[0])、1(vertexList[1])和2(vertexList[2])頂點構成三角形0;用頂點列表中的0(vertexList[0])、2(vertexList[2])和3(vertexList[3])頂點構成三角形1。

             

            2.2虛擬照相機

            照相機確定3D世界中的哪部分是可見的,因而需要將哪部分轉換為2D圖形。在3D世界中照相機被放置和定向,并且定義其可視體,圖2.6展示了我們的照相機模型。

            可視體是由可視角度和前裁剪面(Near Plane)與后裁剪面(Far Plane)定義的一個平截頭體。之所以要選擇平截頭體構造可視體,是因為我們的顯示器都是矩形的。在可視體中不能被看見的物體都會被刪除,刪除這種數據的過程就叫做“裁剪”。

            投影窗口(Projection Window)是可視體內的3D幾何圖形投影生成的用來顯示3D場景的2D圖像的2D區域。重要的是要知道,我們使用min=(-1,-1)和max=(1,1)來定義投影窗口的大小。

            為了簡化繪制,我們使前裁剪面與投影窗口在同一平面上。并且,注意Direct3D中定義的投影平面(即投影窗口所在的平面)是Z = 1的平面。


            posted on 2008-03-13 19:18 lovedday 閱讀(1173) 評論(1)  編輯 收藏 引用

            評論

            # re: 繪制流水線(1)[未登錄] 2009-07-21 12:30

            請問,可視體為什么要有兩個裁剪面  回復  更多評論   

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久婷婷五月综合色奶水99啪| 久久人爽人人爽人人片AV| 99久久成人国产精品免费| 香蕉久久一区二区不卡无毒影院| 国产精品无码久久综合| 九九热久久免费视频| 污污内射久久一区二区欧美日韩| 无码人妻久久一区二区三区| 热久久这里只有精品| 久久亚洲熟女cc98cm| 久久精品国产免费一区| 中文字幕精品久久久久人妻| 久久久久亚洲av无码专区导航 | 久久中文娱乐网| 久久精品国产亚洲av麻豆蜜芽| 久久久久久免费一区二区三区 | 久久综合综合久久狠狠狠97色88 | 亚洲精品无码久久久久| 亚洲午夜精品久久久久久人妖| 久久国产免费直播| 久久精品无码一区二区三区日韩| 狠狠色婷婷久久综合频道日韩 | 国产亚洲精久久久久久无码77777 国产亚洲精品久久久久秋霞 | 亚洲va久久久噜噜噜久久| 欧美麻豆久久久久久中文| 久久久精品午夜免费不卡| 久久ww精品w免费人成| 亚洲精品无码专区久久同性男| 狠狠色丁香久久婷婷综| 亚洲精品无码久久一线| 久久亚洲熟女cc98cm| 噜噜噜色噜噜噜久久| 亚州日韩精品专区久久久| 久久久久黑人强伦姧人妻 | 亚洲七七久久精品中文国产| 国产精品久久久久乳精品爆| 久久最近最新中文字幕大全| 伊人久久精品线影院| 日韩精品国产自在久久现线拍| 99久久99久久精品免费看蜜桃 | 久久婷婷久久一区二区三区|