微信下游戏上会报错
不好意思,之前没在微信上做测试。 感谢你的提示,找到问题,引擎未初始化完成就在调用
if (cc.renderer._forward) {
cc.renderer._forward._programLib.define(shader.name, shader.vert, shader.frag, shader.defines || []);
g_shaders[shader.name] = shader;
} else {
//在微信上初始时cc.renderer._forward不存在,需要等引擎初始化完毕才能使用
cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {
cc.renderer._forward._programLib.define(shader.name, shader.vert, shader.frag, shader.defines || []);
g_shaders[shader.name] = shader;
});
}
代码已经上传github。
uniform float progress[4];
uniform vec2 centres[4];
问下,这两种应该传入什么对象 ?
下面这样写不报错也没有任何效果,看不到东西。
mat.setParamValue(“progress”, [-1.0,-1.0,-1.0,-1.0] );
mat.setParamValue(“centres”, [
new cc.Vec2(0,0),
new cc.Vec2(0,0),
new cc.Vec2(0,0),
new cc.Vec2(0,0),
] );
已解决,看了render-engine.js源码,根据参数读取方式做修改
比如一个float数组给shader
let $createVec4 = (array)=>{
if (array.length != 4){
cc.warn("$createVec4 长度不一致!",array)
}
const ks = "xyzw";
let vec4={
set(index,value){
this[ ks[index]] = value;
},
get(index){
return this[ ks[index]]
}
};
for (let index = 0;index<4;index++){
vec4[ ks[index] ] = array[index];
}
return vec4;
}
mat.setParamValue("progress", $createVec4([-1.0,-1.0,-1.0,-1.0]) );
及时雨 Colin大神的也看了 无奈基础太差看不懂 感谢补充
请问如何代码里动态创建sprite,然后代码里给sprite指定shader?
我在代码里放了一个动态创建Sprite 并设置Shader的测试场景,你可以参考一下。
终于没叫ShaderKiller
其实我很多时间取名叫xxxHelper,但分享出来与我项目中的名字一样不太好。
非常感谢!
非常受用。不过有一点,高斯模糊的效果很奇怪。。。
运行的效果:
预期的效果(Photoshop中处理):
不好意思,Shader程序脚本是网络上找的,上面的效果确实差距很大,你可以尝试一下,修改GaussBlurs中bluramount数值.
params: [
{name: 'bluramount', type: renderer.PARAM_FLOAT, defaultValue: 0.006},
],
我试了下,还是与你Photoshop中不太一样,应该是算法不同,这方面我也是无能为力,不好意思了!
算法问题,自己研究
谢谢回复。我用的1.9.3的版本也是自己找了些资料在写,得到的效果跟你这张发的很像,不过也是与ps处理的相差太远。2.x的新写法正在研究,谢谢
mark
mark
mark 是否 在2.x以下版本 不能用?
大佬,图片过小MaskShader不能用?
高斯模糊要多次Pass才能实现的,而且效率很低,建议游戏中不要使用。