shader问题

版本2.4.10
写个拼图游戏玩发现个问题
1首先在一个拼图块里,取了一个大图的一部分
let spriteFrame = assest.clone();
let rect = new cc.Rect(this.col * this.puzzleSize, this.row * this.puzzleSize, this.puzzleSize, this.puzzleSize);
spriteFrame.setRect(rect);
this.spIcon.spriteFrame = null;
this.spIcon.spriteFrame = spriteFrame;
这个效果没问题,可以裁剪(这个应该是顶点运算呀)
2 写了一个effect,在片元shader里面设置了图片的凹凸
vec2 uv = v_uv0 * 2.0 - 1.0;
// 定义矩形参数
float width = 1.0; // 矩形宽度
float height = 1.0; // 矩形高度
float waikuang = 0.5;
float radius = 0.25; // 半圆半径
float shijiWidth = width - waikuang;

if(uv.x > waikuang || uv.x < -waikuang || uv.y > waikuang || uv.y < -waikuang){
  o.a = 0.0;
}

//上凹
if(uv.y < -shijiWidth * radius){
float subY = shijiWidth + uv.y;
if( subY * subY + uv.x * uv.x < shijiWidth * radius * radius){
    o.a = 0.0;
  }
}

这个效果也没问题
1411725499417_.pic
//-------------
以上两个效果单独使用没问题,但是如果一起使用,运行的时候图片就啥都没有了

这是什么原因呢

1赞

版本2.4.11,记错了

没记错的话,使用类似shader的时候好像不能使用图集,打包时候也不能将图片的packable勾上

感觉是uv数据对不上了,可能要重新对齐uv数据。但是看了api,也没发现给effect传参的文档

裁剪了大图,得到的小图,在fs里面uv数据并不是0-1
如果大图是1000 x 1000,裁剪左上角原点的100 x 100,那么这个uv.x的范围是0-0.1 ,如果裁剪的是左上角
rec(100,100,100,100),起点从100,100开始,那么uv.x数据是0.1-0.2。所以需要给fs传两个参数才能重新对准

1赞

对的,因为合起来的图在内存里就是一整块纹理,你得自己算uv传进去

1赞

嗯嗯,自己传参后算,就显示正常了,3q3q