初学shader拿着玩的,看大佬们的帖子基本都是操作的fs,想试着操作下vs,结果和我想得完全不同。
话说pos=cc_matViewProj * pos之后,pos的xy的范围是多少?比如我想传一个百分比u_percent(0.~1.)然后pos.x += u_percent,期望让图片按图片宽度百分比右移,但是移动似乎不是这样?而且在编辑器中查看的时候发现好像还跟我窗口位置相关?这块也没找到教程,心好累,手动 @白玉无冰 大佬不知道有没有用
好像发现了在转换之前pos.x += (u_percent * u_width) / 2.0再传一个宽度进来好像是可用的,但是不知道为啥要除个2,求大佬详解
先扯皮,看看这些 内置 Uniform
https://docs.cocos.com/creator3d/manual/zh/material-system/builtin-shader-uniforms.html
cc_matWorld 模型空间转世界空间矩阵
cc_matViewProj 视图投影矩阵
以 builtin-2d-sprite.effect 为例,计算前的pos 的含义不一样。
#if CC_USE_MODEL
pos = cc_matViewProj * cc_matWorld * pos; // pos 这里是模型坐标
#else
pos = cc_matViewProj * pos; // pos 这里是世界坐标
#endif
至于 pos.x += (u_percent * u_width) / 2.0 看看你的u_width 是不是两倍的宽度 
有错误欢迎指出讨论 
@lamyoung
什么叫两倍的宽度?图片宽度是91,精灵的scale也是1,好像我没有地方设宽度为2来着
不对,我理解了,是我自己的问题,这个2.0我知道是怎么回事了,因为我是做居中处理的,所以是只需要移动一半,啊。。。学懵B了都
如果要做顶点坐标操作的话,一般顺序是先按尺寸宽高处理之后再通过矩阵转换,是这个意思吧?
大佬,求教,又遇到个问题:我想拉伸图片的一部分,比如传入一个百分比p,x小于1-2p的不拉伸,大于1-2p的上下拉伸0.1,首先判断这个x>1-2*p就不准确,进不去逻辑。然后拉伸我判断的y>0.5 ? y+=0.1 : y-=0.1;但是要么整张图一起拉伸,要么就是斜的。这里只能通过代码去计算顶点组mesh来处理么?没有effect处理方法么?
void main () {
vec4 pos = vec4(a_position, 1);
float width = 91.0;
float height = 124.0;
float ww = 960.0;
float wh = 640.0;
// 拉伸 这里去掉 x的前半段判断会造成左边向上斜向拉伸,去掉后半段是右边,同时加上没有反应
if (pos.x > (ww - width) / 2.0 + (1.0 - abs(percent) * 2.0) * width && pos.x < (ww + width) / 2.0) {
if (pos.y > 0.5 * (wh - height)) {
pos.y += 0.1 * height;
} else {
pos.y -= 0.1 * height;
}
}
// 居中
if (abs(percent) < 0.5) {
pos.x += (abs(percent) * width) / 2.0;
} else {
pos.x += ((1.0 - abs(percent)) * width) / 2.0;
}
#if CC_USE_MODEL
pos = cc_matViewProj * cc_matWorld * pos;
#else
pos = cc_matViewProj * pos;
#endif
#if USE_TEXTURE
v_uv0 = a_uv0;
#endif
v_color = a_color;
gl_Position = pos;
}

是这样的效果么?
可能可以 把 pos 传到 fs 中判断, 采样uv时偏移一些

大概是这样的想法,不知道大佬能理解不?percent是传进去的一个float百分比,范围0~0.5
感觉还是mesh搞快一点 
。。。最终还是要走上这条不归路
该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。