• <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圖形數學(6)

             

            flat著色和Gourand著色

            若渲染速度并不重要,我們可以逐像素地計算光照和霧化。(對于光照,這項技術稱作Phong著色模型----不要和鏡面反射的Phong模型混淆。)然而這樣做計算量過于巨大,所以我們折中并減少計算的頻率。有兩個選擇:逐多邊形或逐頂點計算,這兩項技術分別稱作flat著色和Gourand著色。

            使用flat著色,對整個三角形只計算一次光照值。通常計算光照的位置為三角形中心,表面法向量為三角形法向量。如圖15.17所示,使用flat著色,物體由多邊形構成的本質表露無遺,沒有任何光澤可言。

            Gourand著色,又稱作頂點著色或插值著色。在頂點級計算光照和霧,然后這些值被線性插值用于整個多邊形面,圖15.18是和圖15.17同樣的茶壺,但采用Gourand著色。

            顯然,Gourand著色在保持物體的光滑性上做的較好。當被模擬的值本來就是線性時,Gourand著色能得到很好的效果。問題在于如果這些值不是線性變化,比如鏡面高光。比較Gourand著色茶壺的高光部分和Phong著色茶壺的高光部分,如圖15.19所示。Phong著色中,除去幾何不連續的把手、壺嘴部分,高光的連續性很好,而Gourand著色中,由其高光面甚至可辨出各個小面元的分布。

            線性插值的基本問題是內插值不可能大于較大的頂點值,所以高光只能在頂點出現,充分細化可解決這一問題。盡管有著自身的局限性,Gourand著色仍是現今硬件最常用的方法。

             

            緩存

            渲染涉及大量的緩存,這里緩存只是一個簡單的存有像素數據的矩形內存塊,最重要緩存是幀緩存和深度緩存。

            幀緩存存儲每個像素的色彩,即渲染后的圖像。色彩可能有多種格式,但就當前的討論來說,不考慮格式的差異。幀緩存常常在顯存中,顯卡不斷讀取該內存,并將二進制數據轉化為CRT接收的合適信號。所謂雙緩存技術,是為了防止圖像在未完全渲染好之前就被顯示。此時實際上使用了兩個幀緩存,一個緩存存放當前顯示的圖像,另一個離線緩存存放正在渲染的圖像。

            一旦渲染完成并準備好顯示即切換緩存,有兩種方式:

            (1)如使用頁切換技術,則命令顯示卡開始從離線緩存讀取數據,接著對調兩個緩存的角色,現在的顯示緩存變為離線緩存。

            (2)也可以將離線緩存復制到顯示緩存。

            圖15.20顯示了雙緩存的情況:

            另一個用于渲染的重要緩存是深度緩存----也稱作z-buffer。深度緩存不存儲像素的顏色,而代之以像素的深度信息。存入緩存的深度信息有多種不同的變體,但它們基本上都反映物體到攝像機的距離。實踐中通常保存的都是裁剪空間的z坐標,這就是z-buffer名稱的由來。

            深度緩存一般用于計算物體之間的遮擋,當光柵化三角形時,計算各像素的插值深度。在渲染像素之前,將這個深度值和深度緩存中該像素的深度值比較,如果新的深度比現有值離攝像機更遠,則新的像素被丟棄;否則像素顏色被寫到幀緩存,并用新的更近的值更新深度緩存。在開始進行新的渲染之前,記得要置z-buffer各值為無限遠(在裁剪空間中,這個值為1.0),這樣第一批像素才能通過深度測試,一般不對z-buffer設置雙緩存。

             

            紋理映射

            物體外觀不僅僅限于形狀,不同物體的表面有著不同的顏色和圖案,一個簡單而有效的實現這種特性的方法是使用紋理映射。

            紋理圖是一個鋪在物體表面上的位圖,使用紋理圖可以在"texel"(一個texel是紋理圖中的一個像素)級別控制顏色,這優于在頂點或三角形級別控制物體顏色,也許你已經經過紋理映射的實例,不過還請看看下面的例子,它展示了紋理的強大威力。圖15.21展示了一個紋理映射前和后的3D人物模型"Rayne"。

            紋理圖不過是一個貼在模型表面的位圖,它是如何把整個物體包起來的?實際上,有多種不同方法,可以將網格用紋理圖包起來。平面映射線性地將紋理投射于三角網,球形映射、柱形映射和立方體映射則有不同的投射方式,這里每項技術的細節并不重要,因為建模軟件如3D Studio Max會處理它們。無論位圖如何放置,每個頂點都要賦給一個紋理映射坐標,也就是位圖上的2D笛卡爾坐標,通常稱它們為u、v,以防止和渲染坐標x、y混淆。紋理映射通常按照位圖尺寸單位化為[0, 1]之間的值,如圖15.22,給出了圖15.21模型中的一個紋理。

            此紋理圖為Rayne的頭部所用,包圍在頭部的一半,從鼻子到后腦中線。藝術家特意使她的尺寸合適于模型,頭部的另一半使用同樣的紋理,一個鏡像。

            注意紋理不一定要連續地包圍幾何體。因為每個三角形都能獨立映射,紋理的不同部分可以任意映射到物體的不同部分。比如上圖中左上角的牙齒就是這樣:Rayne有毒牙,嘴張開時可以看見。當然如果不使用連續映射,且紋理映射坐標存儲在頂點級,紋理交界處對應的頂點坐標是雙份的。注意這里對紋理使用了原點在左上角的坐標系,這類似于硬件訪問的方式,更具學術性的文獻則使用左下角為坐標原點。

            如前所述,各頂點都有一個紋理的u、v坐標。用這種方式,紋理被釘在三角網上,要渲染三角形中的某個像素,可以先插值計算其u、v坐標(類似于Gourand著色),然后讀取對應的紋理值。


            posted on 2008-03-07 13:10 lovedday 閱讀(1116) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            综合人妻久久一区二区精品| 少妇久久久久久被弄到高潮| 久久久av波多野一区二区| 久久91精品国产91久久户| 激情五月综合综合久久69| 亚洲日本久久久午夜精品| 久久精品人人做人人爽电影蜜月 | 国产A三级久久精品| 国产精品无码久久久久久| 久久久久99精品成人片| 人妻精品久久久久中文字幕69| 国产69精品久久久久9999| 精品国产日韩久久亚洲| 亚洲天堂久久精品| 日韩人妻无码精品久久久不卡| 久久免费香蕉视频| 久久精品视频网| 久久久亚洲欧洲日产国码aⅴ| 久久久噜噜噜久久| 国产成人久久AV免费| 国产精品成人久久久| 久久夜色撩人精品国产| 久久免费国产精品一区二区| 伊人久久综合精品无码AV专区| 日韩精品无码久久一区二区三| 亚洲国产精品人久久| avtt天堂网久久精品| 日韩久久久久久中文人妻| 久久精品卫校国产小美女| 午夜福利91久久福利| 日本久久中文字幕| 色综合久久久久综合99| 亚洲国产精品综合久久网络| 日日狠狠久久偷偷色综合0| 久久99精品久久久久久水蜜桃| 91精品婷婷国产综合久久| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久夜色精品国产网站| 日韩精品久久久肉伦网站| 久久综合狠狠综合久久综合88 | 人妻无码久久精品|