【问题标题】:Adding CIFilter to SCNNode turns node into white box将 CIFilter 添加到 SCNNode 将节点变为白框
【发布时间】:2019-06-27 18:10:59
【问题描述】:

我想将 CIGaussianBlur 添加到 ARKit 中显示的 SCNNode

但是,添加该过滤器会将节点变成“白盒”。这是没有和有过滤器的节点。

没有CIFilter

CIFilter

以下是相关代码:

let gaussianBlurFilter = CIFilter(name: "CIGaussianBlur")!
gaussianBlurFilter.name = "blur"

node.filters = [gaussianBlurFilter]
let material = node.geometry?.firstMaterial
material?.diffuse.contents = UIColor.blue

node.position = SCNVector3(x: 0, y: 0, z: -0.39)
camera.addChildNode(node)

之前的 Stack Overflow 问题表明,在 Metal 上添加 CIFilter 是不可能的,但我相信现在从 iOS 11 开始就可以了。

另外,我正在尝试在SCNNode 上实现UIVisualEffectView-type 效果,所以如果您知道另一种实现方式,请告诉我!

【问题讨论】:

  • 您不应该将过滤器添加到层而不是节点吗? let layer = CALayer() layer.filters = [gaussianBlurFilter]
  • iOS 上从未支持图层过滤器。他在过滤节点方面是正确的,这是 SceneKit 支持的。
  • 这方面有什么进展吗?
  • @omarojo 不幸的是,我从未找到解决方案。

标签: ios scenekit arkit


【解决方案1】:

你可以试试这个:

let gaussianBlur    = CIFilter(name: "CIGaussianBlur")
gaussianBlur?.name  = "blur"
gaussianBlur?.setValue(15, forKey: "inputRadius")
node.filters        = [gaussianBlur] as? [CIFilter]

并像这样配置 SceneView:

sceneView.antialiasingMode    = .none
sceneView.isJitteringEnabled  = false

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多