天天看點

D3D11_TEXTURE_ADDRESS_MODE(紋理尋址模式)

最近在學習D3D11,看到如下:



SamplerState samColor

{

    Filter = MIN_MAG_MIP_LINEAR;

    AddressU = Clamp; 

    AddressV = Clamp;

};

不太了解,查閱了相關的D3D11SDK 以及一些其他資料,總結如下:

       在D3D11中,紋理坐标系統是由水準的u 軸和豎直的v軸構成的,由u、v坐标系确定紋理的每個像素;u、v的取值範圍為[0,1]。實際上紋理坐标可以超出這個值,它通過Direct3D的尋址模式定義的。通常的尋址模式有5種,其定義的資料結構如下所示:

Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.

typedef enum D3D11_TEXTURE_ADDRESS_MODE
{
    D3D11_TEXTURE_ADDRESS_WRAP = 1,
    D3D11_TEXTURE_ADDRESS_MIRROR = 2,
    D3D11_TEXTURE_ADDRESS_CLAMP = 3,
    D3D11_TEXTURE_ADDRESS_BORDER = 4,
    D3D11_TEXTURE_ADDRESS_MIRROR_ONCE = 5,
} D3D11_TEXTURE_ADDRESS_MODE;      
每個模式的作用如下:      
WRAP:在超出[0,1]範圍的坐标上不斷重複原來的問題;      
MIRROR:在超出[0,1]範圍的坐标上原來紋理的鏡像來代替;      
CLAMP:在超出[0,1]範圍的坐标上,用距離[0,1]範圍内最近的一組紋理坐标(u,v)來代替;      
BORDER:在超出[0,1]範圍的坐标上,用一種邊界顔色來代替,邊界顔色需要在TextureAddress.Border中設定;      
MIRROR_ONCE:在超出[0,1]範圍的坐标上,其作用MIRROR和CLAMP的結合效果相似。取紋理坐标的絕對值,是以,是圍繞原點進行鏡像的,然後再截取其最大值;
       



繼續閱讀