【发布时间】:2021-02-25 17:34:08
【问题描述】:
我的节点大小为 64x32,纹理大小为 192x192,我正在尝试在第一个节点处绘制此纹理的第一部分,在第二个节点处绘制第二部分...
片段着色器(附加到 SKSpriteNode,纹理大小为 64x32)
void main() {
float bX = 64.0 / 192.0 * (offset.x + 1);
float aX = 64.0 / 192.0 * (offset.x );
float bY = 32.0 / 192.0 * (offset.y + 1);
float aY = 32.0 / 192.0 * (offset.y);
float normalizedX = (bX - aX) * v_tex_coord.x + aX;
float normalizedY = (bY - aY) * v_tex_coord.y + aY;
gl_FragColor = texture2D(u_temp, vec2(normalizedX, normalizedY));
}
-
offset.x- [0, 2] -
offset.y- [0, 5] -
u_temp- 纹理大小为 192x192 - function to convert a value from [0,1] to, for example, [0, 0.33]
但结果似乎是错误的:
带有附加纹理的SKSpriteNode
没有纹理的SKSpriteNode(我想用纹理来实现)
【问题讨论】:
-
“但是结果好像不对” - 结果有什么问题?
-
同样的代码可以写在一行上:
gl_FragColor = texture2D(u_temp, (v_tex_coord.xy + offset.xy) * vec2(64.0, 32.0) / 192.0); -
感谢 cmets p.s 我更新了问题
-
v_tex_coord在 [0.0, 1.0] 范围内,不是吗? -
根据documentation,是的
标签: ios opengl-es sprite-kit opengl-es-2.0