最近在學習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的結合效果相似。取紋理坐标的絕對值,是以,是圍繞原點進行鏡像的,然後再截取其最大值;