Как отобразить одну и ту же сцену в двух ARSCNViews, используя ARKit? - PullRequest
0 голосов
/ 09 июня 2018

У меня проблемы с контроллерами вида.Я пытаюсь создать приложение, которое использует ARKit для отображения на двух сценах AR.Я пытался использовать коллекцию розеток, но я получаю сообщения об ошибках типа "[ARSCNView]?"не имеет членаЯ начинаю со Swift, поэтому не знаю некоторых вещей.

Вот мой код:

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController {
    @IBOutlet var bothEyes: [ARSCNView]!

    override func viewDidLoad() {
        super.viewDidLoad()

        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = .horizontal

        let cubeNode = SCNNode(geometry: SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0.0))
        cubeNode.position = SCNVector3(0, 0, -0.2)// in meters

        bothEyes.session.run(configuration)
        bothEyes.scene.rootNode.addChildNode(cubeNode)
    }
}

1 Ответ

0 голосов
/ 09 июня 2018

Все, что вам нужно сделать, это поделиться одним ARSession между двумя ARSCNViews (и, как я уже говорил, вам нужен делегат):

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

    @IBOutlet weak var sceneView: ARSCNView!
    @IBOutlet weak var sceneView2: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.delegate = self
        sceneView.showsStatistics = true
        let scene = SCNScene(named: "art.scnassets/ship.scn")!
        sceneView.scene = scene
        sceneView.isPlaying = true

        // SceneView2 Setup
        sceneView2.scene = scene
        sceneView2.showsStatistics = sceneView.showsStatistics

        // Now sceneView2 starts receiving updates
        sceneView2.isPlaying = true     
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARWorldTrackingConfiguration()
        sceneView.session.run(configuration)
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        sceneView.session.pause()
    }
}

Но помните!Частота кадров 60 fps теперь распределяется между двумя ARSCNViews (30 к / с + 30 к / с).

И я использовал Horizontal Stack View, чтобы расположить ARSCNViews линейно.

enter image description here

...