У меня есть текстура и прямоугольник.
Я хочу повторить текстуру на этом прямоугольнике. Но только часть этого.
Допустим, я хочу использовать текстурные координаты из 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
, который отличается.
Как достичь своей цели, не меняя текстуру, используя ее часть и повторяя только эту часть?
Обратите внимание, что Я не хочу добавлять больше вершин в прямоугольник.
Это довольно легко сделать с помощью фрагментного шейдера:
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);
}
Этот шейдер симметричен, поэтому окно поиска движется по диагонали. Но вы можете применить собственное смещение и масштаб к каждому компоненту координат текстуры в отдельности, тогда окно будет двигаться совершенно свободно.
Других решений пока нет …