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時僅是一個問題。我不知道爲什麼。