SKSpriteNode仅加载纹理颜色的一部分

3
是否有可能将颜色应用到SKSpriteNode纹理上,但仅与特定颜色混合?
例如,假设我有一个立方体(不是3D的,而是看起来像立方体的2D纹理),并且我将其顶部设置为白色,左下角为蓝色,右下角为红色。我能否应用颜色和颜色混合因子,只改变我选择的颜色?例如,白色、红色或蓝色。
请注意,我只是简单地使用了一个立方体来举例说明。在实际情况中,节点不会像立方体面那样容易“分割”,以便进行解决。纹理可以留有其中一部分透明或始终为白色,但它始终会有至少一种其他颜色,这种颜色不应更改(将其视为部分背景、部分游戏对象的纹理)。

3
不行,你不能针对特定颜色进行目标定位,你需要使用着色器来实现你的效果,或者使用覆盖层skspritenode来保持你的纯色。 - Knight0fDragon
1
太棒了,那是非常有用的信息,非常感谢。 - TommyBs
@Knight0fDragon 你想将你的评论扩展为一个答案吗?毕竟它解决了问题。 - TommyBs
1个回答

1
为了实现您想要达到的目标,您有两个选择:
1) 学习如何使用SKShader: 很遗憾,我无法帮助您,因为我有一个负责这些事情的人,所以我不需要深入学习着色器。基本上,您所做的是在GPU级别上,针对您想要允许更改的特定像素。
2) 对于新手用户来说,更容易的方法是使用2个SKSpriteNodes。您可以创建第一个精灵,并使用所有所需的纯色,然后创建一个灰度叠加图像,用于更改您想要更改的所有像素。然后,您可以应用colorBlendFactor来实现所需的效果。
基本上:
let sprite = SKSpriteNode(imageNamed:"fullcolor")
let overlay = SKSpriteNode(imageNamed:"overlay")
overlay.color = .Red
overlay.zPosition = 1
overlay.colorBlendFactor = 1.0
sprite.addChild(overlay)

实际上选择了着色器路线! - TommyBs
非常好,着色器是正确的选择,我会发布着色器代码供人们在未来使用,你可以编辑我的答案或添加一个新的。 - Knight0fDragon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接