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