Code: Select all
sampler SrcSampler = sampler_state
{
Texture = <SrcMap>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
};
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
};
struct VS_OUTPUT
{
float4 Pos : POSITION;
float2 Tex0 : TEXCOORD0;
float2 Tex1 : TEXCOORD1;
float2 Tex2 : TEXCOORD2;
float2 Tex3 : TEXCOORD3;
float2 Tex4 : TEXCOORD4;
float2 Tex5 : TEXCOORD5;
float2 Tex6 : TEXCOORD6;
};
VS_OUTPUT vsMain( VS_INPUT i )
{
VS_OUTPUT o;
o.Pos = i.Pos;
float TexOffset[3] = { 0.005859, 0.003906, 0.001953 };
o.Tex0 = i.Tex + float2( -TexOffset[0], 0.0f );
o.Tex1 = i.Tex + float2( -TexOffset[1], 0.0f );
o.Tex2 = i.Tex + float2( -TexOffset[2], 0.0f );
o.Tex3 = i.Tex;
o.Tex4 = i.Tex + float2( TexOffset[2], 0.0f );
o.Tex5 = i.Tex + float2( TexOffset[1], 0.0f );
o.Tex6 = i.Tex + float2( TexOffset[0], 0.0f );
return o;
}
float4 psMain( VS_OUTPUT i ) : COLOR
{
float BlurWeight[3] = { 0.1, 0.358, 0.773 };//, 1.0, 0.773, 0.358, 0.1 };
float fBlurN = 3.0f;
float4 Color = 0;
Color += BlurWeight[0] * tex2D( SrcSampler, i.Tex0 );
Color += BlurWeight[1] * tex2D( SrcSampler, i.Tex1 );
Color += BlurWeight[2] * tex2D( SrcSampler, i.Tex2 );
Color += tex2D( SrcSampler, i.Tex3 );
Color += BlurWeight[2] * tex2D( SrcSampler, i.Tex4 );
Color += BlurWeight[1] * tex2D( SrcSampler, i.Tex5 );
Color += BlurWeight[0] * tex2D( SrcSampler, i.Tex6 );
return Color/fBlurN;
}
이코드가 제대로 작동을 안합니다.
문제는 vs에서 보내준 텍스쳐좌표가 ps에서는 제대로 전달이 안되는것 같습니다.
tex0의 좌표만 제대로 된 값이 들어있고 tex1 - tex6까지는 값이 이상합니다.
( 확인이 어려워서 칼라값에 tex0.x 값을 넣어봤는데 tex0만 제대로된 값이 표현되고 나머지는 모두 검정..0이거나 0보다 작겠죠...-_- )
vs는 1.1, ps 2.0으로 컴파일하는데 이상합니다.
다이렉트X 셰이더프로그래밍 ( 김용준 역 )의 책의 소스와도 거의 같은데...책의 예제는 작동하고 이건 작동안하니..참 답답한..
vs에서 텍스쳐좌표를 여러개 넘겨줄때 뭔가 다른게 있는지요...?
( 아..버텍스좌표랑 uv는 rhw로 된 사각형의 4점입니다. uv도 0-1.0 사이구요 )