紋理映射基礎(chǔ)(7) 摘要: 紋理階段混合狀態(tài)用于指定當(dāng)前紋理顏色值和alpha值的混合方法。
示例程序演示了紋理階段混合狀態(tài)的使用極其效果,紋理階段混合狀態(tài)在紋理中具有非常重要的作用,示例代碼中設(shè)置紋理階段混合狀態(tài)的代碼如下:
g_device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
g_device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
g_device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
紋理映射基礎(chǔ)(6) 摘要: Direct3D應(yīng)用程序可以為任何圖元的任何頂點指定紋理坐標(biāo),通常使用的 u、v
紋理坐標(biāo)的取值范圍是[0.0, 1.0],但是通過設(shè)置該范圍外的坐標(biāo)值,可以得到紋理映射的特殊效果。
雖然系統(tǒng)允許紋理坐標(biāo)取[0.0,
1.0]范圍外的值,但硬件極限常常影響紋理坐標(biāo)的取值范圍。當(dāng)調(diào)用函數(shù)IDirect3DDevice9::GetDeviceCaps()得到設(shè)備性能后,一個渲染設(shè)備將此極限值放在結(jié)構(gòu)D3DCAPS的成員MaxTextureRepeat中。這個成員的值表示該設(shè)備能允許的紋理坐標(biāo)取值范圍。例如,該值是128,那么輸入的紋理坐標(biāo)必須在范圍[-128,
128]中,使用這個范圍之外的紋理坐標(biāo)是無效的。
紋理映射基礎(chǔ)(5) 摘要:
多級漸進(jìn)紋理由一組分辨率逐漸降低的紋理序列組成,每一級紋理寬度和高度都是上一級紋理寬度和高度的一半。寬和高不一定相等,也就是說,這些紋理不一定都是正方形。
Direct3D在紋理映射時,自動選擇一幅與物體大小最接近的紋理進(jìn)行渲染。當(dāng)物體離投影平面較遠(yuǎn)時,Direct3D會選擇一張尺寸較小、分辨率較低的紋理進(jìn)行渲染;當(dāng)物體離投影平面較近時,Direct3D會選擇一張尺寸較大、分辨率較高的紋理進(jìn)行渲染。Direct3D將紋理序列看成一條多級漸進(jìn)紋理鏈。鏈頭處紋理的分辨率最高,下一級往后依次遞減,鏈尾處紋理的分辨率最低。
紋理映射基礎(chǔ)(4) 摘要:
最近點采樣是4種過濾方式中速度最快但效果最差的過濾方式。Direct3D計算得到的紋理元素地址通常是一個浮點數(shù)值,而非整數(shù)的紋理下標(biāo)值,當(dāng)使用最近點采樣時,Direct3D會復(fù)制與這個浮點值地址最接近的整數(shù)地址的紋理元素的顏色。
設(shè)置最近點采樣的具體方法如下:調(diào)用IDirect3DDevice9::SetSamplerState(),可分別設(shè)置紋理過濾的放大過濾器和縮小過濾器。將第一個參數(shù)設(shè)置為紋理過濾器關(guān)聯(lián)的紋理層序號(0~7)。如果要設(shè)置放大過濾器,第二個參數(shù)設(shè)為D3DSAMP_MAGFILTER,如果要設(shè)置縮小過濾器,第二個參數(shù)設(shè)為D3DSAMP_MINFILTER。第三個參數(shù)可設(shè)為表示最近點采樣的枚舉常量D3DTEXF_POINT。下列代碼將紋理層0的紋理過濾方式設(shè)置為最近點采樣。
紋理映射基礎(chǔ)(3) 摘要:
當(dāng)Direct3D渲染一個圖元時,必須將它通過坐標(biāo)變換映射到二維屏幕上。如果圖元有紋理,Direct3D就需要用紋理來產(chǎn)生圖元的二維渲染圖像上每個像素的顏色。對于圖元在二維屏幕上圖像的每個像素來說,都必須從紋理中獲得一個顏色,從紋理中為每個像素獲取顏色的過程稱為紋理過濾(texture
filtering)。
大多數(shù)情況下,屏幕顯示的圖形大小與紋理貼圖大小不相同,換句話說,這個紋理將被映射到一個比它大或小的圖元的圖像上,這樣紋理常常會被放大或縮小。對紋理的放大會造成許多像素被映射到同一個紋理元素,圖形渲染結(jié)果會有色塊的感覺。縮小一個紋理意味著一個像素被映射到許多紋理元素,圖形看上去會閃爍失真或有鋸齒。為了解決這些問題,可以將相關(guān)紋理元素的顏色融合到一個像素上,如何將多個紋理元素的顏色融合到一個像素上取決于紋理過濾方式。
紋理映射基礎(chǔ)(2) 摘要:
Direct3D紋理對象生成后,紋理對象指針指向的紋理資源指針還沒有被有效賦值,如果想要通過磁盤圖形文件載入紋理,那么必須將磁盤圖形文件的內(nèi)容載入Direct3D紋理資源,因為不同的文件具有不同的格式,所以為了將文件內(nèi)容載入到Direct3D紋理資源,就要了解各種圖形文件的格式,并針對不同的格式編寫不同的代碼將文件內(nèi)容載入到紋理資源中。
從磁盤文件生成并載入紋理相當(dāng)繁瑣,它涉及到各種圖形文件的存儲格式。幸運的是,Direct3D擴(kuò)展實用庫函數(shù)D3DXCreateTextureFromFile()為我們提供了從磁盤圖形文件創(chuàng)建紋理并載入紋理內(nèi)容的快捷方法。
紋理映射基礎(chǔ)(1) 摘要:
為了使渲染的圖形看起來更真實,Direct3D提供了在物體表面繪制紋理的功能。一般說來,紋理是表示物體表面細(xì)節(jié)的一幅或幾幅二維圖形,也稱紋理貼圖(texture)。當(dāng)把紋理按照特定的方式映射到物體表面的時候,能使物體看上去更加真實。當(dāng)前流行的圖形系統(tǒng)中,紋理繪制已經(jīng)成為一種必不可少的渲染方法。在理解紋理映射時,可以將紋理看作應(yīng)用程序在物體表面的像素顏色。在真實世界中,紋理表示一個對象的顏色、圖案以及觸覺特征。但在Direct3D
中,紋理只表示對象表面的彩色圖案,它不能改變對象的幾何形式。更進(jìn)一步說,它只是一種高強度計算行為。