使用 SpriteKit 和 Swift 的自定义着色器有一些不同

Posted

技术标签:

【中文标题】使用 SpriteKit 和 Swift 的自定义着色器有一些不同【英文标题】:Custom shader with SpriteKit & Swift has some difference 【发布时间】:2014-07-16 05:37:34 【问题描述】:

这是我的测试着色器源代码。

//Shader/TestShader.fsh
void main() 
vec4 color = texture2D(u_texture, v_tex_coord).rgba;
gl_FragColor.rgb = vec3(1);
gl_FragColor.a = color.a;

非常简单。这只是为了测试。 对于使用此着色器:

//GameScene.swift 
// override func didMoveToView(view: SKView) 
let sprShader = SKSpriteNode(imageNamed: "Spaceship")
sprShader.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
sprShader.shader = SKShader(fileNamed: "Shader/TestShader.fsh")
self.addChild(sprShader)

我期待精灵的白色轮廓。但它显示白色矩形。 我是初学者。我有什么问题吗?

【问题讨论】:

【参考方案1】:

回答一个非常老的问题,但你可以在着色器中添加一个 if 语句

vec4 color = texture2D(u_texture, v_tex_coord).rgba;
if(color.a > 0.1) 
    gl_FragColor.rgb = vec3(1);

gl_FragColor.a = color.a;

这样只有不透明的像素会被涂成白色

【讨论】:

以上是关于使用 SpriteKit 和 Swift 的自定义着色器有一些不同的主要内容,如果未能解决你的问题,请参考以下文章

使用 SpriteKit 的自定义框架 - 未加载资产文件

从文件名加载 SpriteKit 关卡

使用 Swift 在 SpriteKit 中将自定义“数字”图像作为分数添加到 SKLabelNode

将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作

touchesBegan Swift 2 自定义 SpriteKit 节点

如何在 Swift 中为 SpriteKit 定义类别位掩码枚举?