【问题标题】:How to display the same scene in two ARSCNViews using ARKit?如何使用 ARKit 在两个 ARSCNViews 中显示相同的场景?
【发布时间】:2018-11-19 01:03:49
【问题描述】:

我的视图控制器有问题。我正在尝试创建一个使用 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)
    }
}

【问题讨论】:

    标签: ios swift scenekit augmented-reality arkit


    【解决方案1】:

    您需要做的就是在两个ARSCNViews 之间共享一个ARSession(并且,正如我之前所说,您需要一个代表):

    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 fps + 30 fps)。

    而我使用Horizontal Stack View 线性排列ARSCNViews

    【讨论】:

    • 很抱歉,您能澄清更多吗?我不太了解委托实例部分。我还尝试让视图控制器从 ARSCNViewDelegate 继承,但现在文件中的所有方法都显示错误,提示“方法不会覆盖其超类中的任何方法”和“'NSObject' 类型的值没有成员”
    • 我想以你做虚拟现实设备的方式观看它。两个屏幕,相同的视图(目前)。我想看看我是否可以用 ARKit 做到这一点。抱歉,我一开始没有解释我想用它做什么
    • 两个 ARViews,抱歉
    • 您好@ARGeo,我需要帮助解决我遇到的问题。我得到一个屏幕更新,但另一个不更新。 (两台相机都可以工作)。你能帮忙吗?
    • 我使用的是 iPhone 7
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2019-06-19
    • 2017-11-08
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2018-08-26
    • 2023-03-09
    相关资源
    最近更新 更多