Swift 阿基特立体声&x2013;是否可以同时运行两个ARSCNView?

Swift 阿基特立体声&x2013;是否可以同时运行两个ARSCNView?,swift,augmented-reality,scenekit,arkit,arscnview,Swift,Augmented Reality,Scenekit,Arkit,Arscnview,我正在考虑对我现有的AR应用程序进行一些修改,我想将视图拆分并添加到2ARSCNView中,这样用户可以使用VR卡盒并获得不同的体验,但Xcode总是返回给我: Session (0x102617d10): did fail with error: Error Domain=com.apple.arkit.error Code=102 "Required sensor failed." 所以,我假设我不能同时运行2个ARSCNView会话,或者我错了 答案是:是的,有可能 使用以下代码完成此操

我正在考虑对我现有的AR应用程序进行一些修改,我想将视图拆分并添加到2
ARSCNView
中,这样用户可以使用VR卡盒并获得不同的体验,但Xcode总是返回给我:

Session (0x102617d10): did fail with error: Error Domain=com.apple.arkit.error Code=102 "Required sensor failed."

所以,我假设我不能同时运行2个
ARSCNView
会话,或者我错了

答案是:是的,有可能

使用以下代码完成此操作:

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

        // Setup for sceneView2
        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()
    }
    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
        DispatchQueue.main.async {
            self.updateFrame()
        }
    }
    func updateFrame() {   
        // Clone pointOfView for Second View
        let pointOfView: SCNNode = (sceneView.pointOfView?.clone())!

        // Determine Adjusted Position for Right Eye
        let orientation: SCNQuaternion = pointOfView.orientation
        let orientationQuaternion: GLKQuaternion = GLKQuaternionMake(orientation.x, 
                                                                     orientation.y, 
                                                                     orientation.z, 
                                                                     orientation.w)
        let eyePos: GLKVector3 = GLKVector3Make(1.0, 0.0, 0.0)
        let rotatedEyePos: GLKVector3 = GLKQuaternionRotateVector3(orientationQuaternion, 
                                                                   eyePos)
        let rotatedEyePosSCNV: SCNVector3 = SCNVector3Make(rotatedEyePos.x, 
                                                           rotatedEyePos.y, 
                                                           rotatedEyePos.z)  
        let mag: Float = 0.064 // Interocular distance (in metres)
        pointOfView.position.x += rotatedEyePosSCNV.x * mag
        pointOfView.position.y += rotatedEyePosSCNV.y * mag
        pointOfView.position.z += rotatedEyePosSCNV.z * mag

        // Set PointOfView for SecondView
        sceneView2.pointOfView = pointOfView    
    }
}
有关更多详细信息,请参阅GitHub上的


没有,或者至少您可能会一直出错。当同时使用ARSCN和ARSKVIEW视图时,似乎会出现传感器错误。这可能是因为隐私问题?

有一个主要问题。。。AR对象固定在2个视图之一上。。。所以它看起来像一张图片,非常感谢你!我还打开了Github页面,只丢失了render func!非常感谢!:)也谢谢你!:我已经对此进行了调查。这是由于一根下垫管道造成的。你说的下垫管道是什么意思?我遇到了这个问题。这是因为试图运行两个AR会话吗?