2013-04-24 83 views
0

我想在我的着色器上实现与卷积矩阵的高斯模糊。高斯模糊与着色器上的卷积矩阵

这是我的代码有:

float4 ppPS(float2 uv : TEXCOORD0, uniform sampler2D t1) : COLOR { 
    //kernel matrix 
    float3x3 kernel={1*(1/16),2*(1/16),1*(1/16), 
    2*(1/16),4*(1/16),2*(1/16), 
    1*(1/16),2*(1/16),1*(1/16) 
    }; 

    int x,y; 
    float2 sum = 0; 
    for (x = -1; x <= 1; x++) 
    { 
    for (y = -1; y <= 1; y++) 
    { 
     float2 fl; 
     fl.x = uv.x+x; 
     fl.y = uv.y+y; 
     sum += (fl)*(kernel[x+1][y+1]); 
    } 
    } 
    return tex2D(t1, sum); 
} 

但出于某种原因,我得到的所有在一个纯色的图片。

这里是不模糊的图像:

non blur

这里是所谓的模糊形象:

with blur

的我在做什么错在这里的任何想法?

+1

您正在将滤镜应用于纹理坐标,而不是纹理本身。 – sbabbi 2013-04-24 21:26:57

+0

但我怎样才能应用过滤器的纹理?即时通讯抱歉,但我没有经验 – Itzik984 2013-04-25 08:58:33

回答

1

尝试改变float3x3初始化值转换成浮点格式(.0f)否则所有的值将最终为0

//kernel matrix 
static const float3x3 kernel={1*(1.0f/16.0f),2*(1.0f/16.0f),1*(1.0f/16.0f), 
2*(1.0f/16.0f),4*(1.0f/16.0f),2*(1.0f/16.0f), 
1*(1.0f/16.0f),2*(1.0f/16.0f),1*(1.0f/16.0f) 
}; 

此更改后,你不会看到空白输出图像!