У меня есть довольно простое демонстрационное приложение ARKit, в котором я размещаю несколько объектов с надписью. В настоящее время я использую функцию snapshot()
на ARSCNView
, чтобы получить снимок экрана с видеовходом со всеми моими визуализированными объектами в поле зрения.
Однако я хотел бы получить UIImage только с необработанного ввода камеры, без каких-либо дополнительных визуализированных объектов, предпочтительно в том же разрешении, что и то, что отображается на экране. Я не уверен, что лучший способ сделать это будет. Есть ли способ раздеть визуализированный контент? я должен привязать к камере непосредственно?
В настоящее время это выглядит примерно так:
class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate {
@IBOutlet weak var sceneView: ARSCNView!
var nodeModel:SCNNode!
...
override func viewDidLoad() {
let scene = SCNScene()
sceneView.scene = scene
let modelScene = SCNScene(named: ...
nodeModel = modelScene?.rootNode.childNode(...
...
self.view.addSubview( ...
}
...some ARKit stuff...some model stuff...
}
extension ViewController {
func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {
if self.captureButton.capturing && time > self.captureTime {
captureScreenshot(scene)
self.captureTime = time + TimeInterval(0.1)
}
}
func captureScreenshot(_ scene: SCNScene){
DispatchQueue.main.async() {
let screenshot = self.sceneView.snapshot()
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
}
}
}