1

我正在捕获 ARFrame 并应用过滤器,效果很好,但我想关闭过滤器并返回原始相机源,但我遇到了问题。此代码正在应用过滤器:

 func session(_ session: ARSession, didUpdate frame: ARFrame) {
  let filterImage = setFilter(session.currentFrame)
  sceneView.scene.background.contents = context.createCGImage(filterImage, from: filterImage.extent)
 }

设置sceneView.scene.background.contents后,我无法将其设置回原始来源。原始来源是一个名为:SCNCaptureDeviceOutputConsumerSource的对象,它不在文档中。我尝试保存该对象并再次使用它设置背景内容,但它只会显示它所持有的最后一帧(因此会有静止图像)。它不会持续更新。我不知道如何sceneView.scene.background.contents从与替换之前相同的来源提取数据。

我尝试了设置sceneView.session.delegate = nil,但是没有用,它只是停止更新,并且屏幕看起来像冻结了一样。

有没有办法将 ARSCNView 背景内容重置为其获取数据的原始来源?

如果我重新加载 ARSCNView,它可以工作,但重新加载至少需要一秒半:

   sceneView.session.delegate = nil
   sceneView = nil
   sceneView = ARSCNView(frame: view.bounds)
   view.addSubview(sceneView)
   sceneView.delegate = self
   sceneView.session.run(ARFaceTrackingConfiguration())

感谢您提供的任何帮助。

4

1 回答 1

1

我是 Stackoverflow 发帖的新手,如果这个答案的质量不是那么高,那就是它的原因。我和你有同样的问题。这是我修复它的方法。

首先将 设置sceneView.scene.background.contents为变量。然后您可以将 更改sceneView.scene.background.contents为 例如UIColor.lightGray

如果要将其重置回其原始来源,请执行以下操作。

sceneView.scene.background.contents = originalSource

只要确保不要更改变量originalSource,因为那样您将删除您的 originalSource。

希望这有帮助,

此致

于 2021-03-29T17:07:40.537 回答