本文共 1241 字,大约阅读时间需要 4 分钟。
纹理必须与常量插值或线性插值一起使用以形成一个向量值函数T(u,v) = (r,g,b,a)。也就是,当给定一个纹理坐标(u,v)∈[0,1]2时,纹理函数T返回颜色(r,g,b,a)。Direct3D允许我们以4种不同的方式扩展该函数的值域(称为寻址模式):重复(wrap)、边框颜色(border color)、截取(clamp)和镜像(mirror)。
1.重复:通过在每个整点连接处重复图像来扩展纹理,见下图。
2.边框颜色:通过将每个不在[0,1]2区间内的(u,v)映射为程序员指定的某个颜色来扩展纹理,见下图。
3.截取:通过将每个不在[0,1]2区间内的(u,v)映射为颜色T(u0,v0)来扩展纹理。其中,(u0,v0)∈[0,1]2,(u0,v0)是与(u,v)距离最近的点,见下图。
4.镜像:通过在每个整点连接处镜像图像来扩展纹理,见下图。
由于寻址模式始终驻留在Direct3D设备中(重复模式为默认值),所以当纹理坐标超出[0,1]区间时,我们仍然可以得到采样颜色。
重复寻址模式可能是最常用的寻址模式;因为它可以把纹理平铺在物体表面上,使我们在不提供额外数据的情况下有效地提高纹理分辨率(虽然些额外的分辨率是重复的)。当使用平铺时,我们通常希望纹理是无缝的(seamless)。例如,板条箱纹理不是无缝的,因为你可以清楚地看到它的每个副本(参见下图)。图8.14展示了将一幅无缝的墙砖纹理在平铺 2×3次后的结果。
(将一幅墙砖纹理平铺2×3次。由于该纹理是无缝的,所以很难一下就看出它的重复图案。)
我们在采样器对象中指定寻址模式。
SamplerState samTriLinear{ Filter = MIN_MAG_MIP_LINEAR; AddressU = WRAP; AddressV = WRAP;};SamplerState samTriLinear{ Filter = MIN_MAG_MIP_LINEAR; AddressU = BORDER; AddressV = BORDER; // Blue border color BorderColor = float4(0.0f, 0.0f, 1.0f, 1.0f);};SamplerState samTriLinear{ Filter = MIN_MAG_MIP_LINEAR; AddressU = CLAMP; AddressV = CLAMP;};SamplerState samTriLinear{ Filter = MIN_MAG_MIP_LINEAR; AddressU = MIRROR; AddressV = MIRROR;};
注意:可以单独控制u、v方向上的寻址模式。读者可以亲自试验一下。