Повторите часть текстуры с текстурными координатами

У меня есть текстура и прямоугольник.

Я хочу повторить текстуру на этом прямоугольнике. Но только часть этого.

Допустим, я хочу использовать текстурные координаты из 0.25 в 0.75 на X и Y и повторите это 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 в 0.25, который отличается.

Как достичь своей цели, не меняя текстуру, используя ее часть и повторяя только эту часть?

Обратите внимание, что Я не хочу добавлять больше вершин в прямоугольник.

1

Решение

Это довольно легко сделать с помощью фрагментного шейдера:

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

}

Этот шейдер симметричен, поэтому окно поиска движется по диагонали. Но вы можете применить собственное смещение и масштаб к каждому компоненту координат текстуры в отдельности, тогда окно будет двигаться совершенно свободно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]