이펙트파일로 블러효과 구현

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

운영자: 류광

Locked
비회원

이펙트파일로 블러효과 구현

전체글 글쓴이: 비회원 » 2004-10-20 11:09

코드: 모두 선택

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 사이구요 )

비회원

전체글 글쓴이: 비회원 » 2004-10-20 11:12

아..그래픽카드는 지포스FX 5700 입니다.

예제의 경우 16개의 텍셀을 읽어오는데 이게 잘 작동하는걸 보면 사양의 문제는 아닌것 같고..

드라이버도 가장 최근의 버전(61.77)을 설치했습니다.

비회원

rhw

전체글 글쓴이: 비회원 » 2004-10-20 11:19

pos가 ( x, y, z, rhw )로 되어있으면 버텍스쉐이더 통과 안합니다.

pos를 ( x, y, z )로 바꾸시고 vs를 바뀐 pos맞게 수정 좀 하시구 하면

될 것 같습니다...

비회원

답변감사드립니다.

전체글 글쓴이: 비회원 » 2004-10-20 13:07

답변감사드립니다.

DirectX 셰이더 프로그래밍의 예제와, DX9.0c의 PostProcess를 참고 했었는데..

셰이더 프로그래밍에서 XYZ로 사용하는게 왜일까 했었고,

PostProcess에서 VS를 null로 세팅하는것은 또 왜 일까 궁금했는데..

덕택에 두가지 궁금증이 모두 해결되었습니다.

Locked

접속 중인 사용자

이 포럼을 보고 있는 사용자: Google [Bot], 손님 3 명