2013-04-24 84 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) 
}; 

此更改後,你不會看到空白輸出圖像!