我正在考虑对我现有的AR应用程序进行一些修改,我想拆分视图并以这种方式添加内部用户可以使用VR卡盒并拥有不同的体验,但Xcode总是回复我:
Session (0x102617d10): did fail with error: Error Domain=com.apple.arkit.error Code=102 "Required sensor failed."
那么,我'm supposing that I can' t同时运行2 ARSCNView 个会话,还是我错了?
ARSCNView
答案是: Yes, it's possible .
使用以下代码完成它:
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上查看此项目 .
1 回答
答案是: Yes, it's possible .
使用以下代码完成它: