用纹理坐标重复纹理的部分

时间:2012-11-21 19:06:07

标签: c++ directx coordinates texture-mapping uv-mapping

我有一个纹理和矩形。

我想在那个矩形上重复纹理。 但只是其中的一部分。

假设我想在X和Y上使用从0.250.75的纹理坐标,并重复2次。

如果我将矩形顶点的坐标设置为:

(0.25, 0.25)
(0.25, 0.75 * 2)
(0.75 * 2, 0.25)
(0.75 * 2, 0.75 * 2)

这不会重复从0.250.75两次的纹理,但会产生从0.251.0以及从1.0到{{1}的纹理},这是不同的。

如何实现我的目标,而不是改变纹理,使用它的一部分并仅重复那部分?

请注意我不想在矩形中添加更多顶点。

1 个答案:

答案 0 :(得分:3)

使用片段着色器很容易实现:

float scale;
float offset;

sampler2D baseMap;

struct PS_INPUT 
{
   float2 Texcoord : TEXCOORD0;

};

float4 ps_main( PS_INPUT Input ) : COLOR0
{
   float2 tc =  fmod(Input.Texcoord, scale) + float2(offset, offset);
   return tex2D( baseMap, tc);

}

此着色器是对称的,因此查找窗口沿对角线移动。但是你可以分别对每个纹理坐标组件应用自己的偏移和缩放,然后窗口将完全自由移动。