纹理坐标,其u和v值都在0~1之间,然而,如果我们给了一个超出范围的值怎么办呢?在DirectX和OpenGL中,早已为我们想到了这个问题。在DirectX中,有一种叫做Texture Addressing Mode的东西(在OpenGL中有Wraping Mode),提供了几种常见的方式:
typedef enum D3DTEXTUREADDRESS
{
D3DTADDRESS_WRAP = 1,
D3DTADDRESS_MIRROR = 2,
D3DTADDRESS_CLAMP = 3,
D3DTADDRESS_BORDER = 4,
D3DTADDRESS_MIRRORONCE = 5,
D3DTADDRESS_FORCE_DWORD = 0×7fffffff,
} D3DTEXTUREADDRESS, *LPD3DTEXTUREADDRESS;
Wrap,类似于平铺,就是把这个图片复制很多份,然后像铺瓦片一样一片一片拼起来。
Mirror,和Wrap差不多,唯一不同的是相邻两个拷贝之间是镜像关系。
Clamp,就是超出部分直接抛弃。
Mirror_Once,就是先将图片镜像一份,从而u和v的坐标范围就变成了-1~1了。