如图这是一个有4个sprite 拼出来的一个物体。比如我希望做一个消融特效,而需要针对父物体的中心位置来进行。
我进行了如下尝试:
把父物体blockRoot的 worldPosition 直接传进 shader 中:
shader 中:
找当前点世界坐标:
vec4 pos = vec4(a_position, 1);
a_pos1 = pos; // 也换成这个试过: a_pos1 = cc_matWorld * pos;
sprite-fs 中利用传入的父物体世界坐标和当前坐标做差值进行采样:
vec2 uvsc = vec2(a_pos1.x - u_oriPos.x, a_pos1.y - u_oriPos.y);
vec4 pattern = CCSampleWithAlphaSeparated(patternTexture, uvsc);
patternTexture是个四方连续的噪点图,当 u_oriPos 为0,0时,可以看到物体在编辑器的视图中心有正常的shader效果,但是一但把 u_oriPos 用父物体的 worldPosition 传入,就不行了,起码是位置完全不对。
这是在编辑窗口中心位置的效果:
我就是想让消融中心是父物体的位置。
我感觉我似乎是对物体的 worldPosition 和 shader 文件中的世界坐标理解有问题,它俩好像不是一个东西吧?那么如何转换呢?

