gpt4 book ai didi

sprite-kit - CIFilter GaussianBlur 似乎在 iOS9.x 上被破坏了(与 SKEffectNode 一起使用)

转载 作者:行者123 更新时间:2023-12-03 23:57:14 24 4
gpt4 key购买 nike

我正在尝试使用以下代码片段创建模糊效果:

  let glowEffectNode = SKEffectNode()
glowEffectNode.shouldRasterize = true

let glowSize = CGSize(width: barSize.width, height: barSize.height)
let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize)
glowEffectNode.addChild(glowEffectSprite)

let glowFilter = CIFilter(name: "CIGaussianBlur")
glowFilter!.setDefaults()
glowFilter!.setValue(5, forKey: "inputRadius")

glowEffectNode.filter = glowFilter

当然,它在 iOS 8.x 上运行完美,但在 iOS 9.x 上(在 9.0 和 9.1 上都试过)模糊无法正常运行。 (在模拟器上,节点似乎有点透明,但绝对不模糊,在设备上,它看起来模糊但被裁剪了,并且从中心位置也有偏移:/)

有没有使用 CIFilter 快速解决这个问题的方法?

最佳答案

我对此进行了更多调整并找到了解决方案...

首先,似乎使用奇数作为模糊半径会导致整个节点以偏移量 (???) 呈现,因此使用 10 例如可以解决偏移量问题。

其次,似乎模糊被裁剪了,因为整个节点都是渲染的 Sprite ,为了获得模糊效果,你需要一个额外的空间,所以我为额外的空间使用了一个透明的 Sprite ,下面的代码片段现在可以工作了:

let glowEffectNode = SKEffectNode()
glowEffectNode.shouldRasterize = true

let glowBackgroundSize = CGSize(width: barSize.width + 60, height: barSize.height + 60)
let glowSize = CGSize(width: barSize.width + 10, height: barSize.height + 10)
let glowEffectSprite = SKSpriteNode(color: barColorData.topColor, size: glowSize)
glowEffectNode.addChild(SKSpriteNode(color: SKColor.clearColor(), size: glowBackgroundSize))
glowEffectNode.addChild(glowEffectSprite)

let glowFilter = CIFilter(name: "CIGaussianBlur")
glowFilter!.setDefaults()
glowFilter!.setValue(10, forKey: "inputRadius")

glowEffectNode.filter = glowFilter

我应该提到我正在使用 view.textureFromNode(glowEffectNode) 从这个节点创建一个纹理以提高效率,但我尝试使用节点本身并且问题仍然存在所以上面应该无论如何工作

关于sprite-kit - CIFilter GaussianBlur 似乎在 iOS9.x 上被破坏了(与 SKEffectNode 一起使用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com