首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARView和ARSCNView可以共存吗?

ARView和ARSCNView可以共存吗?
EN

Stack Overflow用户
提问于 2019-12-24 04:05:35
回答 1查看 1.5K关注 0票数 7

我尝试在一个视图控制器中创建这两个视图,并同时运行它们,但这是行不通的,ARView超过了ARSCNView,即使它没有连接到一个出口。然后我尝试将一个视图添加到另一个视图中,但这也不起作用。

代码语言:javascript
复制
 @IBOutlet var arView: ARView!
 @IBOutlet var sceneView: ARSCNView!

这对于ARView来说是独立的:

代码语言:javascript
复制
  let anchor = try! Glasses.loadScene()
  arView.scene.anchors.append(anchor)
  arView.session.run(ARFaceTrackingConfiguration())

这对于ARSCNView来说是独立的,然后我跟踪委托函数中的所有内容。

代码语言:javascript
复制
  sceneView.session.run(ARFaceTrackingConfiguration())
  sceneView.delegate = self

这样做是行不通的:

代码语言:javascript
复制
  let ar = ARSCNView(frame: view.frame)
  ar.delegate = self
  ar.session.run(ARFaceTrackingConfiguration())
  arView.addSubview(ar)

这样做是行不通的:

代码语言:javascript
复制
  let ar = ARView(frame: view.frame)
  let anchor = try! Glasses.loadScene()
  ar.scene.anchors.append(anchor)
  ar.session.run(ARFaceTrackingConfiguration())
  sceneView.addSubview(ar)

当我尝试将一个视图添加到另一个视图时,我注释掉了session.run调用,但这并没有什么区别。

EN

回答 1

Stack Overflow用户

发布于 2022-02-19 11:18:02

硬件约束

这是一个硬件约束,而不是技术上无法为ARView和ARSCNView运行2个单独的ARSCNView。例如,如果运行两个ARViews,您将看到两个视图中都存在实时摄像机信号,但是跟踪不起作用。

工作溶液

如果您从ARView的会话中激活ARSCNView的会话,那么这两个视图都会工作。然而,这个解决方案是为后相机的配置。

代码语言:javascript
复制
sceneView.session = arView.session

代码

我在iPhone X (Xcode 13.2.1,iOS 15.3.1)上构建了它,应该说它工作得很好。

代码语言:javascript
复制
import ARKit
import RealityKit

class ViewController: UIViewController {
    
    var sceneView = ARSCNView(frame: .zero)
    var arView = ARView(frame: .zero)
    
    override func viewDidLoad() {
        super.viewDidLoad()            
        // ARSCNView
        sceneView.frame = CGRect(origin: CGPoint(x: 0, y: 0),
                                   size: CGSize(width: 400, height: 400))
        self.view.addSubview(sceneView)
            
        sceneView.scene = SCNScene()
        sceneView.autoenablesDefaultLighting = true    
        let sphere = SCNNode(geometry: SCNSphere(radius: 0.2))
        sphere.position.z = -1.0
        sceneView.scene.rootNode.addChildNode(sphere)

        // SESSIONS
        sceneView.session = arView.session
            
        // ARView
        arView.frame = CGRect(origin: CGPoint(x: 0, y: 405),
                                size: CGSize(width: 400, height: 400))
        self.view.addSubview(arView)

        let boxScene = try! Experience.loadBox()
        arView.scene.anchors.append(boxScene)
    }
}

让我们检查一个配置:

代码语言:javascript
复制
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
    print(self.arView.session.configuration!)
}

结果:

代码语言:javascript
复制
<ARWorldTrackingConfiguration: 0x282ce79c0 
     worldAlignment=Gravity 
     lightEstimation=Enabled 
     frameSemantics=None 
     videoFormat=< ARVideoFormat: 0x283ad9bd0 
                   imageResolution=(1920, 1440) 
                   framesPerSecond=(60)           
                   captureDeviceType=AVCaptureDeviceTypeBuiltInWideAngleCamera 
                   captureDevicePosition=(1) > 
     autoFocus=Enabled 
     environmentTexturing=Automatic 
     wantsHDREnvironmentTextures=Enabled 
     planeDetection=Horizontal 
     collaboration=Disabled 
     userFaceTracking=Disabled 
     sceneReconstruction=None 
     appClipCodeTracking=Disabled>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59463704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档