1

我有一个纹理和矩形。

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

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

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

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

这不会重复纹理 from 0.25to0.75两次,但会产生纹理 from 0.25to1.0和 from 1.0to 0.25,这是不同的。

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

请注意,我不想向矩形添加更多顶点。

4

1 回答 1

4

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

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);

}

This shader is symmetrical so lookup window moves along diagonal. But you can apply own offset and scale to each texture coordinate component separately then window will move totally freely.

于 2012-11-23T10:36:47.857 回答