cocos creator shader问题

我需要在shader中修改png 图片(纹理)的包装方式。

  这个是我想要设置的内容
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

我在shader里面改成如下结果:
        texture_flow: {
                    value: white,
                    sampler.addressU: warp,
                   sampler.addressV: warp,
                   sampler.addressW: warp,
              }

结果不生效,我想问一下有没有办法让我达到上面想要的效果。

1赞

把纹理属性里面的wrapmode选项改成repeat

就是纹理本身的属性改成repeat也是不生效的。

repeat 模式需要你的图片分辨率是2的幂次方吧,我试了下是生效的呀

我把我的图片改成64*64了,在编辑器里面调效果感觉还是GL_CLAMP_TO_EDGE的效果,还是有问题。

你在把纹理属性里面的packable钩点掉试试,你是不是要做uv动画

谢谢,我找到原因了我用了编辑器demo shader自带的 CCTexture(texture_flow, v_uv0, o); 这个方法,换成glsl的 o = texture(texture_flow, v_uv0); 就生效了。

现在又遇到一个问题,编辑器里面的效果看起来是正常了,但是游戏里面效果看起来不正常,其他参数效果都对,就是纹理采样看起来有问题。 请问代码传入shader ub还需要注意什么其他问题吗?比如要对贴图特殊处理之类的。

this.node.getComponent(cc.Sprite).getComponents(cc.RenderComponent).forEach(renderComponent => {
let material: cc.Material = renderComponent.getMaterial(0);
//console.log(material)
material.setProperty(“flowColor”, this.flowColor);
material.setProperty(“flowSpeed”, this.flowUV);
material.setProperty(“flowInten”, this.flowInten);
material.setProperty(“flowAngle”, this.flowAngle);
//material.setProperty(“texture_flow”, “flow”);
renderComponent.setMaterial(0, material);
});
我之传的是普通ub 贴图只是靠编辑器配置,结果看到有些内的效果不正确。

是web端的话,很可能是web端creator 会自动开启合图功能所以把纹理属性里面的packable点掉不要开启自动合图,如果一定要开启那么你就要自己计算纹理在相对合图的uv了

我这里都是单独的图片,没有进行静态合图。

web端会默认开启动态合图呀,你点击要传入shader的纹理把packable关闭试试

好的 是你说的这个原因 解决掉了, 谢谢

大佬您好,还有个新的问题,就是如何关闭shader list的宏开关,比如我在shader内部自定义了一个贴图宏开关USE_TEXTURE_XXX, #if USE_TEXTURE_XXX, 如何在ts中关闭或者开启这个宏。