Сбросить фоновое содержимое ARSCNView к исходному источнику - PullRequest
0 голосов
/ 31 марта 2020

Я снимаю 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())

Спасибо за любую помощь, которую вы можете оказать.

...