2012-11-21 59 views
1

我有紋理和矩形。用紋理座標重複紋理的部分

我想重複該矩形上的紋理。 但只有它的一部分。

假設我想在X和Y上使用從0.250.75的紋理座標並重復2次。

如果我設置了矩形的頂點的COORDS到:

(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.01.00.25,這是不同。

如何實現我的目標,而不是改變紋理,使用它的一部分,並只重複那部分?

請注意,我不想添加更多的頂點到矩形。

+1

評論,因爲我沒有時間寫任何代碼,但它應該很容易在像素着色器中執行此操作,在將所提供的u,v紋理座標轉換爲您想要採樣的範圍之前,質地... – jcoder

回答

2

它很容易實現與片段着色器:

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

} 

這個材質是沿對角線對稱的,因此查找窗口中移動。但是您可以分別對每個紋理座標分量應用自己的偏移和縮放,然後窗口將完全自由移動。