最近在学习D3D11,看到以下:数据结构
ide
SamplerState samColor
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};学习
不太理解,查阅了相关的D3D11SDK 以及一些其余资料,总结以下:code
在D3D11中,纹理坐标系统是由水平的u 轴和竖直的v轴构成的,由u、v坐标系肯定纹理的每一个像素;u、v的取值范围为[0,1]。实际上纹理坐标能够超出这个值,它经过Direct3D的寻址模式定义的。一般的寻址模式有5种,其定义的数据结构以下所示:class
Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.lamp
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的结合效果类似。取纹理坐标的绝对值,所以,是围绕原点进行镜像的,而后再截取其最大值;