急需cocos2d-js的高斯模糊,大神帮帮忙

cocos2d-js的test里面实现了很多shader了,但是想要高斯模糊,也就是blur的。c++里面已经是实现,不知道如何在js里面也同时实现。。。查了好多源码,没弄出来,求助各位大神

我也有同样问题,同问

blurSprite:function(sprite,_blurSize)
{
if(sprite)
{
var shader = new cc.GLProgram(“res/blur.vsh”, “res/blur.fsh”);
shader.retain();
shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
shader.link();
shader.updateUniforms();
}
//为节点与子节点添加滤镜
this.blurAllChild(sprite, shader);

    //本例中无需设置的参数

// var substract = shader.getUniformLocationForName(“substract”);
// gl.uniform4f( substract, 0,0,0,0);

    shader.use();
    shader.setUniformsForBuiltins();
    var blurSize = shader.getUniformLocationForName("blurSize");
    //这个函数由于jsb实现有问题,原本只能实现整数传递,现在在fsh中加入0.0001的参数调整,范围为0-10000
    gl.uniform2f(blurSize, _blurSize,_blurSize);
    
},
blurAllChild:function(sprite,shader){
    sprite.shaderProgram = shader;
    for(var i=0;i<sprite.getChildrenCount();i++)
    {
        this.blurAllChild(sprite.children*,shader);
    }
}

这个是我整理了很多个问题后整合的,希望对你也有帮助。VSH用其他test的某个例子的,FSH就用它test里面的Blur_example,不过有个问题是每个渲染的对象都是单独的,所以在边缘叠加时会有明显的边界。如果还有其他问题可以再回复我,我尽量帮忙,因为之前也在这问题栽了很久*

适合整个场景么?

你的是哪个版本的呀? gl.uniform2f(blurSize, _blurSize,_blurSize); 我的3.3没有这个函数uniform2f:6:

我当时应该用的是3.2的,那个函数记得应该不是引擎里的,是opengl的内容

“res/blur.vsh”, “res/blur.fsh” 这两个文件能共享下吗?

MARK一下 下次再来

mark :2::2::2::2:

fsh文件
#ifdef GL_ES
precision mediump float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

uniform vec2 blurSize;

void main() {
vec4 sum = vec4(0.0);
sum += texture2D(CC_Texture0, v_texCoord - 0.0004 * blurSize) * 0.05;
sum += texture2D(CC_Texture0, v_texCoord - 0.0003 * blurSize) * 0.09;
sum += texture2D(CC_Texture0, v_texCoord - 0.0002 * blurSize) * 0.12;
sum += texture2D(CC_Texture0, v_texCoord - 0.0001 * blurSize) * 0.15;
sum += texture2D(CC_Texture0, v_texCoord ) * 0.16;
sum += texture2D(CC_Texture0, v_texCoord + 0.0001 * blurSize) * 0.15;
sum += texture2D(CC_Texture0, v_texCoord + 0.0002 * blurSize) * 0.12;
sum += texture2D(CC_Texture0, v_texCoord + 0.0003 * blurSize) * 0.09;
sum += texture2D(CC_Texture0, v_texCoord + 0.0004 * blurSize) * 0.05;

gl_FragColor = sum * v_fragmentColor;

}

vsh文件
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}

是不适合整个场景的,我的做法是做了个截屏,然后针对截屏做模糊效果…效率方面会有点问题

马克西 罗德里格斯

mark一个,谢谢iam_ai

做完效果差点感觉