我正在尝试了解如何在SpriteKit中应用着色器,因此我制作了以下着色器来自带有一些修改的指南(http://battleofbrothers.com/sirryan/understanding-shaders-in-spritekit):
void main() {
vec4 val = texture2D(u_texture, v_tex_coord);
if (val.a == 1.0) {
gl_FragColor = vec4(1.0,1.0,1.0,1.0);
} else {
gl_FragColor = val;
}
}
这个简单着色器的想法是将精灵节点的每个非透明像素转换为白色。
着色器适用于我的精灵节点,这些节点具有单个纹理作为其图像。
我遇到的问题是,当我将它应用于来自多层SKScene的sprite节点时,着色器似乎被忽略了。我试图将着色器设置为场景的每个子节点,但它仍然没有出现。
有什么建议吗?
答案 0 :(得分:1)
我找到了解决问题的方法。
我最初尝试将着色器应用于我的精灵的每个子节点,如下所示:
for child in children {
(child as! SKSpriteNode).shader = myShader
}
代码没有用完。
现在我使用以下工作代码,它遵循我的子节点的层次结构:
(self.childNode(withName: "body") as! SKSpriteNode).shader = myShader
(self.childNode(withName: "body")!.childNode(withName: "arm") as! SKSpriteNode).shader = myShader
// ...