• <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>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2011年7月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            首先從MIPMAP的原理說起,它是把一張貼圖按照2的倍數進行縮小。直到1X1。把縮小的圖都存儲起來。在渲染時,根據一個像素離眼睛為之的距離,來判斷從一個合適的圖層中取出texel顏色賦值給像素。在D3D和OGL都有相對應的API控制接


            透過它的工作原理我們可以發現,硬件總是根據眼睛到目標的距離,來玄奇最適合當前屏幕像素分辨率的圖層。假設一張32768x32768的mipmap貼圖,當前屏幕分辨率為1024*1024。眼睛距離物體比較近時,mipmap最大也只可能從1024*1024的Mipmap圖層選取texel。再次,當使用三線性過濾(trilinear)時,最大也只能訪問2048*2048的圖層選取texel,來和1024*1024圖層中的像素進行線性插值。

            為了加快渲染速度和減少圖像鋸齒,貼圖被處理成由一系列被預先計算和優化過的圖片組成的文件,這樣的貼圖被稱為 MIP map 或者 mipmap

             

            多級漸進紋理由一組分辨率逐漸降低的紋理序列組成,每一級紋理寬度和高度都是上一級紋理寬度和高度的一半。寬和高不一定相等,也就是說,這些紋理不一定都是正方形。

            Direct3D在紋理映射時,自動選擇一幅與物體大小最接近的紋理進行渲染。當物體離投影平面較遠時,Direct3D會選擇一張尺寸較小、分辨率較低的紋理進行渲染;當物體離投影平面較近時,Direct3D會選擇一張尺寸較大、分辨率較高的紋理進行渲染。Direct3D將紋理序列看成一條多級漸進紋理鏈。鏈頭處紋理的分辨率最高,下一級往后依次遞減,鏈尾處紋理的分辨率最低。

            Direct3D能估計出多級漸進紋理鏈中哪幅紋理的分辨率最接近想要的輸出結果,然后它將像素映射到紋理空間。當最終顯示的圖形大小介于任意兩級紋理圖形之間時,Direct3D將兩級紋理的相應元素進行混合后顯示。

            多級漸進紋理過濾能夠有效地提高圖形渲染速度當物體離投影平面較遠時,Direct3D會選擇一張尺寸較小的紋理進行渲染,而無需經過復雜的諸如各項異性紋理過濾,并且由于這時紋理需要的顯存比不使用多級漸進紋理時小,因此能有效地減少紋理載入顯存的時間。缺點是對內存的要求比較高


            設置多級漸進紋理過濾方式

            當最終顯示的紋理貼圖大小介于任意兩級紋理之間時,Direct3D能夠取得兩級紋理元素進行混合后顯示,具體的混合方式由指定的多級漸進紋理過濾方式決定。可以調用函數IDirect3DDevice9::SetSamplerState()設置多級漸進紋理過濾方式,將第一個參數設為紋理層序號,第二個參數設為D3DSAMP_MIPFILTER表示多級漸進紋理過濾,第三個參數設為在相鄰紋理級之間的過濾方式,可取枚舉類型D3DTEXTUREFILTERTYPE的任意值。下面的示例代碼設置相鄰紋理級之間的過濾方式為線性過濾。

            g_device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

            如果將第三個參數設為D3DTEXF_NONE,那么就會一直使用最高一級的紋理,即禁用多級漸進紋理過濾。如果將其設為D3DTEXF_POINT,就會只使用與圖元大小最匹配的一級紋理。如果將其設為D3DTEXF_LINEAR,Direct3D就將與圖元大小最匹配的兩級紋理以線性方式混合。

            需要注意的是,多級紋理過濾是縮小和放大過濾器的結合。例如,如果將縮小和方法過濾器設為線性過濾,但是多級紋理過濾方式設為最近點采樣,Direct3D就會選擇與要顯示的紋理貼圖大小最接近的紋理級別,在該級紋理上完成雙線性紋理過濾,并將結果作為像素的值。如果將縮小、放大過濾器和多級漸進紋理都設置為線性過濾,則Direct3D就會在兩個最接近的紋理級別上都進行雙線性紋理過濾,然后再對相鄰兩級紋理圖形上對應的兩個紋理顏色進行加權平均,最后的結果作為單個像素值。這種為了圖元中的一個像素,而結合了兩幅紋理,共8個像素的技術,稱為“三線性過濾”,因為它在紋理的三個方向----u、 v和紋理級別上都進行了線性過濾。

            可以通過IDirect3DDevice9::SetSamplerState()函數設置實際渲染時紋理過濾的最大級數,其中需要將第二個參數設為D3DSAMP_MAXMIPLEVEL,第三個參數設為實際渲染時紋理過濾的最大級數。下面的示例代碼設置紋理層0的最大多級紋理過濾級數為16。

            g_device->SetSamplerState(0, D3DSAMP_MAXMIPLEVEL, 16);

            還可以通過將IDirect3DDevice9::SetSamplerState()的第二個參數設為D3DSAMP_MIPMAPLODBIAS,設置多級紋理映射級數偏移值。如果對某個紋理映射設置正偏移值,得到的圖形結果就會比原來的更清晰,但鋸齒更多;反之設為負偏移值,得到的圖形結果就會更模糊。

            代碼:實例下載

            posted on 2011-08-06 17:51 風輕云淡 閱讀(10393) 評論(0)  編輯 收藏 引用 所屬分類: DX
            国产成人香蕉久久久久| 99精品国产综合久久久久五月天| 久久久久久午夜成人影院| 97久久超碰国产精品2021| 99精品久久久久久久婷婷| 香港aa三级久久三级老师2021国产三级精品三级在 | 久久免费视频网站| 亚洲国产成人久久综合碰| 久久久久无码精品国产| 久久久黄片| a级成人毛片久久| 国内精品伊人久久久久妇| 国产精品久久久福利| 欧美成人免费观看久久| 久久久久综合网久久| 久久精品人人做人人爽97| 亚洲欧美日韩精品久久亚洲区| 久久99热国产这有精品| 日产精品久久久一区二区| 午夜精品久久久久久影视777| 九九精品99久久久香蕉| 国产A级毛片久久久精品毛片| 久久精品国产精品亚洲人人 | 青青热久久综合网伊人| 亚洲午夜无码久久久久| 麻豆久久| 一本久久综合亚洲鲁鲁五月天| 国产巨作麻豆欧美亚洲综合久久 | 亚洲中文字幕伊人久久无码| 亚洲精品国产成人99久久| 久久精品国产一区二区三区日韩| 少妇人妻综合久久中文字幕| 精品久久久久久无码国产| 久久99精品国产99久久6| 久久综合狠狠色综合伊人| 久久久久久久综合日本亚洲| 2021少妇久久久久久久久久| 精品久久一区二区| 国产激情久久久久影院老熟女免费 | 久久久精品国产免大香伊| 久久久久高潮综合影院|