子物体shader如何获取父物体的世界坐标参与计算?


如图这是一个有4个sprite 拼出来的一个物体。比如我希望做一个消融特效,而需要针对父物体的中心位置来进行。
我进行了如下尝试:
把父物体blockRoot的 worldPosition 直接传进 shader 中:image
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 文件中的世界坐标理解有问题,它俩好像不是一个东西吧?那么如何转换呢?

着色器里采样使用的是 UV 坐标系,你需要把外部场景里的坐标转换为 UV 坐标体系的才行。

理解,那如果是3d 物体的拼接呢?它没有平整的 uv。我之前做过用 xz 平面的直接映射世界坐标的木纹纹理。前提是木纹部分不动。如果我要移动木块呢,而木块又都是拼接的,每个拼接组需要连续的一套木纹纹理该如何拼接。而木纹也只需要 xz 平面方向投影采样下来。这该如何处理?