请问打成图集后的texture在片元着色器上的v_uv0都是合成后大图的uv,怎么办?

版本:cocoscreator2.2.2
请问打成图集后的texture在片元着色器上的v_uv0都是合成后大图的uv,这个有什么解决方法吗,既想要合批,又要用到shader

2赞

有,我直接贴代码吧

let frame = this.sprite.spriteFrame;
            let l = 0, r = 0, b = 1, t = 1;
            l = frame.uv[0];
            t = frame.uv[5];
            r = frame.uv[6];
            b = frame.uv[3];
            let u_uvOffset = new cc.Vec4(l, t, r, b);
            let u_uvRotated = frame.isRotated() ? 1.0 : 0.0;
            this.material.setProperty("u_uvOffset", u_uvOffset);
            this.material.setProperty("u_uvRotated", u_uvRotated);
8赞

effect中

vec2 uvOffset;
    uvOffset.x = (v_uv0.x-u_uvOffset.x)/(u_uvOffset.z-u_uvOffset.x);
    uvOffset.y = (v_uv0.y-u_uvOffset.y)/(u_uvOffset.w-u_uvOffset.y);
    if(u_uvRotated > 0.5) {
      float temp = uvOffset.x;
      uvOffset.x = uvOffset.y;
      uvOffset.y = 1.0 - temp;
    }
3赞

大佬6p,mark一下,赶紧试试去

学到了,感谢大佬

要是不行,你去打楼主~

楼主表示很淦,但是不慌 ORZ

emmm…好像不行啊,本意是想做个圆:


但是实际显示出来还是方形:
image

你好像理解错了,看看标题,这个是计算图集texture中每个小图的真实UV,不计算获取到的就是图集的UV坐标,我已经试成功了
image
image
image
image

明白了,就是说对packable的还是没办法是吧?

packable勾上就是cocoscreator默认给你把散图打包了, 也是处于图集状态,是一样的效果,都是可以的,大佬的代码无论是否是图集都是可以获取到正确的uv

bingo

emmm…我再去看看去

是不是获取到的是图集的uv?所以我这计算方式其实是错的

大佬,能帮忙解释下frame.uv里面的8个值的意义吗?我觉得我的答案或许在这方面

[左下x,左下y,右下x,右下y,左上x,左上y,右上x,右上y]

1赞

收到,谢谢,我再去试试

晕,我好像方向找错了,难受

找来找去发现原来我以前的代码就是对的,问题在于我调用刷新的时候是在onLoad里面,这时候刷新的数据不对,我改成了在start中并且scheduleOnce到下一帧再设置材质属性就正常了,莫名其妙

bug是这样的 (doge)