Texture Addressing Modes

Texture Addressing Modes

你可能已经注意到了在TextureMapping.fx中对SamplerState对象成员AddressU = WRAP和AddressV = WRAP的赋值。这就是纹理寻址模式,当纹理坐标超出范围[0, 1]时,你可以自行控制应该怎么显示。Direct3D支持四种纹理寻址模式:Wrap,Mirror,Clamp,Border。

Wrap

在Wrap寻址模式下,在范围[0, 1]之外的部分,纹理会被当作vertex coordinates重复映射。例如,把一个纹理映射到一个四边形上,该四边形的UVs坐标是(0.0,0.0),(3.0,0.0),(0.0,3.0),(3.3,3.3),映射的结果是在UV两个坐标轴上方向都重复3次。图5.8说明了这种情况。

Texture Addressing Modes_第1张图片
图5.8 A textured quad in wrap texture address mode. (Texture by Brian Maricle.)

注意:
在图5.8中,纹理贴图周围的黑色边框是实际纹理的一部分,而不是在wrap寻址过程中创建的。该黑色边框只是用于wrap寻址时标出整数边界。

 

Mirror

Mirror寻址模式与wrap寻址模式很相似,不同之处是在整数边界处,相邻的纹理成镜像显示而不是重复显示。图5.9中显示了在同一个纹理四边形中,使用mirror寻址模式的结果。

Texture Addressing Modes_第2张图片
图5.9 A textured quad in mirror texture address mode. (Texture by Brian Maricle.)

 

Clamp

在Clamp寻址模式下,纹理不再是拼接的。只被使用一次,并且所有的坐标都被clamp到范围[0, 1]。这会产生一种把纹理边缘的颜色smearing(拖尾)的效果,如图5.10所示。

Texture Addressing Modes_第3张图片
图5.10 A textured quad in clamp texture address mode. (Texture by Brian Maricle.)

 

注意:
图5.10中的映射纹理图与图5.8和5.9中的完全不一样。黑色的边框线被移除了,并且图片也被裁剪了,因此边界的pixels呈现出不同的颜色变化。如果使用最开始的纹理图(也就是带有黑色边框的),那么每一个边界的pixels都会是黑色,也就是“clamped”值。

 

Border

与clamp寻址模式一样,border寻址模式也是只使用一次纹理图。但与clamp不同的是,对于坐标超出范围[0, 1]部分的使用一种边界颜色值,而不是smaring边界颜色。图5.11展示了带有黑色边线的原始纹理图,在border寻址模式下使用蓝色边界的结果。

Texture Addressing Modes_第4张图片
图5.11 A textured quad in border texture address mode. (Texture by Brian Maricle.)

 

总结

本章详细讲述了texture mapping。完成了一个完整的纹理映射effect,并学习了更多的HLSL语法。讲述了纹理采样中用到的minification,magnification,mipmapping和filtering processes。最后,深入了解了纹理寻址模式,并讲解了当几何图形的纹理坐标超出[0, 1]范围的情况下,如何产生各种不同的效果。

纹理映射是现代图形学的基础,后面的章节都建立在此基础上。

Exercises

1. Modify the SamplerState object in TextureMapping.fx to experiment with various permutations of filter
modes. Use point, linear, and anisotropic filtering, and observe the results as you zoom in and out with a
textured surface.
2. Import a quad with UVs that range outside [0, 1], and experiment with the texture addressing modes in
the SamplerState object of TextureMapping.fx. Specifically, use wrap, mirror, clamp, and border, and
observe the results. The book’s companion website has an example quad (in .obj format, a 3D model format
that NVIDIA FX Composer supports).

1.修改TextureMapping.fx中的SamplerState对象,测试多个不同的滤波选项。分别使用point,linear,以及anisotropic filtering进行测试,同时调整camera与纹理表面的距离并观察输出结果。
2.添加一个四边形,设置其UVs范围超出[0, 1],然后通过修改TextureMapping.fx中SamplerState的纹理寻址模式进行测试。具体的说,就是分别使用wrap,mirror,clamp和border寻址模式并观察输出结果。本书配套网站上有一个四边形的模型样例(是NVIDIA FX Composer支持的一种 .obj 3D模型格式)。

 

本章配套的学习代码:

http://download.csdn.net/detail/chenjinxian_3d/9570518

你可能感兴趣的:(Texture Addressing Modes)