我正在捕捉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
,因为这样会删除原始源。
希望这能有所帮助,
致以最诚挚的问候