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

            天行健 君子當自強而不息

            3D圖形數學(8)

             

            當三角形的頂點轉換到裁剪空間后,我們對三角形做兩個重要測試。注意,這里討論的順序并不一定是硬件執行的順序。

             

            背面剔除

            第一個測試稱作背面剔除,其目的是去除背面攝像機的三角形。在標準三角網格中,我們永遠看不到三角形背面,除非進入那些多面體內部。去除這些三角形并非必要,畫出它們依然得到正確的圖像,因為它們會被前方的三角形蓋住。但我們不想浪費時間去繪制任何看不見的物體,所以我們常做背面剔除,特別是在理論上有一半的三角形為背向的。

            實踐中,只有少于一半的三角形能被剔除,特別是靜態場景中,創建時就沒有背面(如地形面)。當然,也還能去掉一些背向三角形(比如山背后),但如果我們高于地面,多數面仍為正向的。然而,動態物體就有可能節約一半的背面了。

            有兩種方法可用于探測背向三角形。第一種是裁剪和投影的,在裁剪空間(或攝像機空間)中進行的。基本思想是判斷眼睛是否在三角形所在平面的前面,如圖 15.23所示,將背向剔除的面都用灰色繪制。注意背向剔除不依賴于視錐,實際上,它甚至不依賴于攝像機朝向,只考慮三角形與攝像機的相對位置。

            為在3D中執行背面剔除,需要三角形法向量和一個從眼睛到三角形的向量(可取三角形上任何一點,我們經常任取一頂點)。如果上面兩個向量的方向大致相同(點積大于0),則三角形為背向的。前述背面剔除方法主要用于軟件渲染的時代,那時候預先計算好的表面法向量存儲在三角形級。如今,由于向渲染硬件投送幾何體已經稱為瓶頸,這類多余的信息都不再發送了。當今圖形硬件上,通常利用屏幕空間中三角形頂點的順序(順時針或逆時針)進行背面剔除。這里約定,從前面看時,三角形頂點順序為順時針。于是,便可剔除那些逆時針頂點順序的三角形。API允許用戶控制背面剔除,有時可以在渲染特殊幾何體時不進行剔除,或者當物體反轉的時候可將前面的剔除順序反過來。

             

            裁剪

            即使正對攝像機,三角形也可能部分或完全在視錐外而不可見。在投影到屏幕空間之前,一定要確保它們完全在視錐內,這個過程稱作裁剪,裁剪一般由硬件完成。標準多邊形裁剪算法是Sutherland-Hodgman算法,它將多邊形分裂為多個小多邊形來解決裁剪問題,裁剪完后再組合起來。對平面做多邊形裁剪時,沿邊遍歷多邊形,依次對每邊進行裁剪。邊的兩個頂點要么在或不在平面內,所以總共有四種情況,每種情況產生0、1、2個輸入點,如圖15.25:

            圖15.26顯示了右裁剪多邊形的情形。注意,裁剪輸出頂點而不是邊。圖15.26中,邊畫出來只是為了說明。特別是最后一步似乎產生兩條邊,但實際只產生一個頂點----最后一條邊只是為了封閉多邊形加上的。

            在每一階段的最后,如果保留的頂點數少于三個,則多邊形不可見(注意1個或2個頂點無法組成多邊形,輸出頂點數只能為0或至少3個)。一些圖形硬件不在3D中做所有6個面的裁剪,而代之以近面和2D裁剪。

             

            光柵化

            裁剪以后,根據公式15.6,頂點終于可以投影到屏幕坐標了。當然這些坐標是浮點型的連續坐標,而我們渲染的像素是離散的,所以如何判斷對應關系?開發一個算法是非常困難的。如果算法錯誤,三角形之間會出現裂縫。如果我們做混合,重疊的三角形也會顯示出來。從另一方面說,必須保證渲染三角形代表的平面時,每像素只渲染一次。幸運的是,圖形硬件保證了這一切。

            雖然,我們不必知道硬件如何決定某像素屬于某三角形,但還是有必要了解對一個單獨的像素,它會做些什么。概念上有三步:

            (1)著色:像素著色指為像素計算顏色的過程。一般,像素先光照再霧化,像素著色的輸出值不但有RGB,還有alpha值表示透明,用于混合。

            (2)測試:拒絕像素一般有三種測試方法。裁剪測試去除渲染窗口外的像素(假如做了完整的視錐測試則不必要),深度測試用z緩沖去除像素,alpha測試以alpha值為基礎去除像素。可以使用多種alpha測試,但最常見的是去除過分透明的像素(我們不希望這類像素寫入深入緩存)。

            (3)寫入:如果像素通過了深度測試和alpha測試,則更新幀緩存和深度緩存。深度緩存用新值替代舊值即可,幀緩存復雜一些,如果不需要混合,則用新的像素顏色替代舊的值;否則就進行新舊顏色的混合,依據alpha值決定它們各自的貢獻。根據不同的圖形硬件,也可執行一些其他運算,如加、減。乘。


            posted on 2008-03-11 10:23 lovedday 閱讀(1378) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久久艹| 久久久久久久亚洲Av无码| 久久久久久久尹人综合网亚洲| 久久国产精品77777| 色综合久久天天综合| 一级女性全黄久久生活片免费| 一本色道久久88—综合亚洲精品| 久久无码高潮喷水| 久久丫忘忧草产品| 国产精品久久久久久福利69堂| 欧美亚洲日本久久精品| 亚洲精品无码成人片久久| 精品久久久久久无码中文字幕| 亚洲中文精品久久久久久不卡| 国产精品九九久久免费视频 | 国产亚洲精午夜久久久久久| 亚洲国产成人久久一区久久| 久久ww精品w免费人成| 久久久久久免费视频| 国产精品嫩草影院久久| 久久精品国产精品亚洲精品| 无码八A片人妻少妇久久| 国产精品永久久久久久久久久 | 久久精品青青草原伊人| 久久99国产精品久久99| 国产亚洲欧美精品久久久| 精品久久久无码人妻中文字幕| 久久亚洲天堂| 亚洲国产成人久久综合一 | 午夜精品久久久久久久久| 久久免费看黄a级毛片| 综合网日日天干夜夜久久| 亚洲国产精品无码久久SM | 久久久WWW成人免费毛片| 国产伊人久久| 久久综合狠狠综合久久激情 | 国产A级毛片久久久精品毛片| 99久久免费只有精品国产| 狠狠色综合网站久久久久久久| 99精品伊人久久久大香线蕉| 久久精品嫩草影院|