着色器不在我的精灵之上
Shader not laying on top of my sprite
我试图了解如何在 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;
}
}
这个简单着色器的想法是将精灵节点的每个非透明像素转换为白色。
着色器与我的 sprite 节点一起工作,这些节点具有单一纹理作为它们的图像。
我遇到的问题是,当我将着色器应用于来自多层 SKScene 的精灵节点时,着色器似乎被忽略了。我已经尝试将着色器设置到场景的每个子节点,但它仍然没有出现。
有什么建议吗?
我找到了解决问题的方法。
我最初尝试将着色器应用于精灵的每个子节点,如下所示:
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
// ...
我试图了解如何在 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;
}
}
这个简单着色器的想法是将精灵节点的每个非透明像素转换为白色。
着色器与我的 sprite 节点一起工作,这些节点具有单一纹理作为它们的图像。
我遇到的问题是,当我将着色器应用于来自多层 SKScene 的精灵节点时,着色器似乎被忽略了。我已经尝试将着色器设置到场景的每个子节点,但它仍然没有出现。
有什么建议吗?
我找到了解决问题的方法。
我最初尝试将着色器应用于精灵的每个子节点,如下所示:
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
// ...