2013-04-20 29 views
0

我正在嘗試創建一個模糊的着色器,並且我已經完成了該操作。然而,這是一個問題。在紋理周圍有一個黑色的背景,當着色器運行時,它會從背景中擷取顏色,並最終使我的整個圖像變暗(但它仍然模糊圖像,就好像它也降低了亮度) 。爲了確保這是我認爲正在發生的事情,我將背景設置爲白色,並且確實足以讓我的形象變得黯淡無光。我真的不知道如何防止這種情況,因爲模糊大小超出了紋理邊界,是否有任何方法可以防止在我處理的紋理之外發生紋理查找?如何防止使用紋理以外的顏色模糊?

斷枝:

precision mediump float; 

uniform sampler2D CC_Texture0; 
uniform float u_time; 

const lowp int SAMPLES = 9; 
varying vec2 v_texCoord;   
varying highp vec2 transCord[SAMPLES]; 

void main() 
{ 
     vec4 sum = vec4(0.0); 

    sum += texture2D(CC_Texture0, transCord[0]) * 0.05; 
    sum += texture2D(CC_Texture0, transCord[1]) * 0.09; 
    sum += texture2D(CC_Texture0, transCord[2]) * 0.12; 
    sum += texture2D(CC_Texture0, transCord[3]) * 0.15; 
    sum += texture2D(CC_Texture0, transCord[4]) * 0.16; 
    sum += texture2D(CC_Texture0, transCord[5]) * 0.15; 
    sum += texture2D(CC_Texture0, transCord[6]) * 0.12; 
    sum += texture2D(CC_Texture0, transCord[7]) * 0.09; 
    sum += texture2D(CC_Texture0, transCord[8]) * 0.05; 

     gl_FragColor = sum; 
} 

頂點着色器

precision mediump float; 

attribute vec4 a_position; 
attribute vec2 a_texCoord; 

const lowp int SAMPLES = 9; 

uniform highp float texelWidthOffset; 
uniform highp float texelHeightOffset; 
uniform highp float blurSize; 
uniform float u_time; 

varying vec2 v_texCoord;   
varying highp vec2 transCord[SAMPLES]; 

void main() 
{ 
     gl_Position = CC_MVPMatrix * a_position; 
    v_texCoord = a_texCoord;  
    highp vec2 offset = vec2(texelWidthOffset, texelHeightOffset) * (u_time * blurSize); 

    transCord[0] = a_texCoord - offset * 4.0; 
    transCord[1] = a_texCoord - offset * 3.0; 
    transCord[2] = a_texCoord - offset * 2.0; 
    transCord[3] = a_texCoord - offset * 1.0; 
    transCord[4] = a_texCoord; 
    transCord[5] = a_texCoord + offset * 1.0; 
    transCord[6] = a_texCoord + offset * 2.0; 
    transCord[7] = a_texCoord + offset * 3.0; 
    transCord[8] = a_texCoord + offset * 4.0; 
} 

更新:看來這個渲染到CCRenderTexture時僅是一個問題。我不知道爲什麼。

回答

0

將S和T中紋理的包裝模式設置爲GL_CLAMP_TO_EDGE - 這將意味着超出範圍的UV座標vales返回更合理的結果