• <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 閱讀(1381) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            国产精品综合久久第一页| 欧美国产精品久久高清| 97精品国产97久久久久久免费 | 久久无码专区国产精品发布| 久久精品午夜一区二区福利| segui久久国产精品| 久久99精品久久久久久水蜜桃| 久久国产欧美日韩精品| 国产精品99久久精品爆乳| 无码乱码观看精品久久| 色噜噜狠狠先锋影音久久| 精品久久久久成人码免费动漫| 亚洲AV无码久久精品蜜桃| 久久AV高潮AV无码AV| 亚洲精品高清久久| 狠狠色丁香婷婷综合久久来| 久久久久亚洲AV无码专区首JN| 久久人人爽人人爽人人AV东京热| 久久久久国产精品麻豆AR影院| 国产成人精品久久一区二区三区| 久久精品国产亚洲AV蜜臀色欲| 国产精品久久国产精麻豆99网站| 久久久久国色AV免费观看| 国产精品免费看久久久| 久久超碰97人人做人人爱| 亚洲欧美久久久久9999| 亚洲欧美国产日韩综合久久| 久久99国产精品一区二区| 欧美噜噜久久久XXX| 2021国内久久精品| 久久夜色精品国产亚洲av| 久久99亚洲综合精品首页| 久久91亚洲人成电影网站| 热re99久久6国产精品免费| 无码任你躁久久久久久| 久久久WWW成人免费毛片| 国产精品VIDEOSSEX久久发布| 久久久久99精品成人片试看| 亚洲综合精品香蕉久久网| 99久久精品免费看国产一区二区三区 | 久久久国产精品福利免费|