版本: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
你好像理解错了,看看标题,这个是计算图集texture中每个小图的真实UV,不计算获取到的就是图集的UV坐标,我已经试成功了




明白了,就是说对packable的还是没办法是吧?
packable勾上就是cocoscreator默认给你把散图打包了, 也是处于图集状态,是一样的效果,都是可以的,大佬的代码无论是否是图集都是可以获取到正确的uv
bingo
emmm…我再去看看去
是不是获取到的是图集的uv?所以我这计算方式其实是错的
大佬,能帮忙解释下frame.uv里面的8个值的意义吗?我觉得我的答案或许在这方面
[左下x,左下y,右下x,右下y,左上x,左上y,右上x,右上y]
1赞
收到,谢谢,我再去试试
晕,我好像方向找错了,难受
找来找去发现原来我以前的代码就是对的,问题在于我调用刷新的时候是在onLoad里面,这时候刷新的数据不对,我改成了在start中并且scheduleOnce到下一帧再设置材质属性就正常了,莫名其妙
bug是这样的 (doge)
