• <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无码久久久久不卡免费网站| 久久久精品免费国产四虎| 国产人久久人人人人爽| 狠狠狠色丁香婷婷综合久久俺| 久久狠狠色狠狠色综合| 久久精品国产一区二区三区| 久久久久亚洲国产| 久久电影网2021| 国产香蕉久久精品综合网| 乱亲女H秽乱长久久久| 国产激情久久久久影院小草| 中文成人无码精品久久久不卡| 久久久久无码精品国产不卡| 久久精品一区二区影院 | 久久性精品| 国产精品久久久久jk制服| 亚洲精品视频久久久| 91精品久久久久久无码| 久久综合九色综合网站| 欧美日韩成人精品久久久免费看| 丰满少妇人妻久久久久久| 久久这里只有精品首页| 亚洲国产精品无码久久久久久曰| 国内精品久久九九国产精品| 亚洲精品白浆高清久久久久久| 久久久久亚洲AV无码专区桃色| 国产精品久久久久国产A级| 99精品国产综合久久久久五月天| 色偷偷88欧美精品久久久| 久久亚洲国产精品五月天婷| 91麻豆精品国产91久久久久久| 精品久久久久久久无码| 中文字幕无码精品亚洲资源网久久 | 国产精品毛片久久久久久久| 久久九九兔免费精品6| 久久精品人人做人人爽电影| 亚洲精品97久久中文字幕无码| 精品久久久久久无码中文字幕| 精品久久久久久无码免费| 无码8090精品久久一区|