Я снимаю ARFrame и применяю фильтры, что прекрасно работает, но я хочу отключить фильтры и go вернуться к исходному каналу камеры, но у меня возникают проблемы. Этот код применяет фильтр:
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())
Спасибо за любую помощь, которую вы можете оказать.