将ARSCNView背景内容重置为其原始源



我正在捕捉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())

谢谢你能提供的任何帮助。

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

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

如果您想将其重置回原始源,只需执行以下操作即可。

sceneView.scene.background.contents = originalSource

只需确保不要更改变量originalSource,因为这样会删除原始源。

希望这能有所帮助,

致以最诚挚的问候

相关内容

  • 没有找到相关文章

最新更新