Shader使用后怎么取消Shader

使用Shader做了一个效果后 发现设置节点的透明度没有效果了。
更改 gl_FragColor = vec4(v.r, v.g, v.b, v.a); v.a设置也没有效果。
请问能不能取消Shader,或者开启Shader之后怎么使节点实现透明的效果?

你看下这个帖子,http://forum.cocos.com/t/shader/47692

大神 ,我看了那个帖子啦。
其实我想要的就是渐隐效果 但是不知道怎么做 因为用了Shader后改变节点的opacity没有效果了。
所有Shdaer透明效果怎么做·····顺便问一下有没有办法取消掉Shad

在shader里面可以设置每个像素的透明度
shader是没办法取消的,每个渲染节点都必须有shader
不知道你的意思是不是要恢复默认的shader,如果是的话直接找到cocos默认的shader,设置给节点就可以了

2赞

感谢大大回复解惑~~ :grinning:

不好意思,请教前辈,
cocos默认的shader设置给节点这件事,具体该怎么写呢?

_sgnode.setState(0)

1赞

感謝前輩指點,謝謝:blush:

两种方式:

  1. 使用cocos的接口this.sp._sgNode.setState(isGray ? 1: 0);
    2.把默认shader的内容放到一个自定义的shader里面,当自定义shader使用
1赞

Sprite的shader上的确这样就可以回复了,谢谢

var ShaderUtils = require("ShaderUtils");

cc.Class({
    extends: cc.Component,

    properties: {
        sp: sp.Skeleton
    },

    onLoad: function () {
        ShaderUtils.setShader(this.sp, "gray");
    },
});

如图,在编辑器中的效果:

添加shader之后:

1赞

這個讚,感謝大神 (膜拜中) :heart_eyes:
因為 spine 的 _sgNode 裡沒有 setState 方法,我一直以為不能這樣使用,

您的 _sgNode.setShaderProgram( arg ) 方法解了我一個大疑問,太感謝您了 :kissing_closed_eyes:

开启Shader之后怎么使节点实现透明的效果 这个楼主你实现了吗,遇到一样的问题了 shader里设置透明度无效

声明shader的地方加入varying vec4 v_fragmentColor;
计算alpha 值的时候 * v_fragmentColor.a

shader有个混合模式,看下设置了没有