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

            天行健 君子當(dāng)自強(qiáng)而不息

            3D圖形數(shù)學(xué)(8)

             

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

             

            背面剔除

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

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

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

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

             

            裁剪

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

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

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

             

            光柵化

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

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

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

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

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


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


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            公告

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關(guān)鏈接

            搜索

            最新評論

            久久棈精品久久久久久噜噜| 一级女性全黄久久生活片免费 | 狠狠色丁香婷婷久久综合不卡| 久久亚洲日韩精品一区二区三区| 精品久久久久久无码中文字幕一区| 久久精品国产亚洲AV大全| 久久国产精品免费| 亚洲香蕉网久久综合影视 | 日韩欧美亚洲综合久久影院Ds| 久久久久久久综合狠狠综合| 久久精品aⅴ无码中文字字幕重口| 精品久久久久中文字幕一区| 色综合久久久久久久久五月| 久久线看观看精品香蕉国产| 久久综合九色综合网站| 国产AV影片久久久久久| 久久久久亚洲Av无码专| 久久久久久久精品成人热色戒| 一本大道加勒比久久综合| 77777亚洲午夜久久多喷| 欧美性猛交xxxx免费看久久久| 精品久久久久久亚洲| 色欲综合久久中文字幕网| 香蕉aa三级久久毛片| 日本福利片国产午夜久久| 午夜久久久久久禁播电影| 精品综合久久久久久97| 伊人热热久久原色播放www| 精品人妻伦九区久久AAA片69 | 青青热久久国产久精品| 亚洲国产精品久久| 免费精品99久久国产综合精品| 久久久久亚洲av无码专区导航| 伊人久久大香线蕉综合影院首页| 欧美日韩精品久久久免费观看| 精品久久人人做人人爽综合| 狠狠精品久久久无码中文字幕 | 久久精品中文无码资源站| 久久综合亚洲色HEZYO社区| 久久99精品国产麻豆宅宅| 亚洲女久久久噜噜噜熟女|