8.8 寻址模式
纹理必须与常量插值或线性插值一起使用以形成一个向量值函数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.重复:通过在每个整点连接处重复图像来扩展纹理(参见图8.10)。
2.边框颜色:通过将每个不在[0,1]2区间内的(u,v)映射为程序员指定的某个颜色来扩展纹理(参见图8.11)。
3.截取:通过将每个不在[0,1]2区间内的(u,v)映射为颜色T(u0,v0)来扩展纹理。其中,(u0,v0)∈[0,1]2,(u0,v0)是与(u,v)距离最近的点(参见图8.12)。
4.镜像:通过在每个整点连接处镜像图像来扩展纹理(参见图8.13)。
由于寻址模式始终驻留在Direct3D设备中(重复模式为默认值),所以当纹理坐标超出[0,1]区间时,我们仍然可以得到采样颜色。
重复寻址模式可能是最常用的寻址模式;因为它可以把纹理平铺在物体表面上,使我们在不提供额外数据的情况下有效地提高纹理分辨率(虽然些额外的分辨率是重复的)。当使用平铺时,我们通常希望纹理是无缝的(seamless)。例如,板条箱纹理不是无缝的,因为你可以清楚地看到它的每个副本(参见图8.10)。图8.14展示了将一幅无缝的墙砖纹理在平铺 2×3次后的结果。
我们在采样器对象中指定寻址模式。下面是图8.10到8.13对应的寻址模式参数:
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方向上的寻址模式。读者可以亲自试验一下。
文件下载(已下载 1154 次)发布时间:2014/8/9 下午3:38:58 阅读次数:4161