我有一个纹理和矩形。
我想在那个矩形上重复纹理。 但只是其中的一部分。
假设我想在X和Y上使用从0.25
到0.75
的纹理坐标,并重复2次。
如果我将矩形顶点的坐标设置为:
(0.25, 0.25)
(0.25, 0.75 * 2)
(0.75 * 2, 0.25)
(0.75 * 2, 0.75 * 2)
这不会重复从0.25
到0.75
两次的纹理,但会产生从0.25
到1.0
以及从1.0
到{{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);
}
此着色器是对称的,因此查找窗口沿对角线移动。但是你可以分别对每个纹理坐标组件应用自己的偏移和缩放,然后窗口将完全自由移动。