首页 > 解决方案 > 如何从 ARFrame 相机设置 SCNView 相机?

问题描述

我在ViewController中创建了一个SCNView,我有一个ARFrame信息,如何设置SCNView摄像头节点,让它和ARFrame摄像头一样?我不想用ARSCNView。

标签: swiftaugmented-realityscenekitarkit

解决方案


ARSession 可以作为独立实体运行(不一定要连接到视图)。使用以下代码来获得您所期望的:

import SceneKit
import ARKit

class ViewController: UIViewController {

    @IBOutlet var sceneKitView: SCNView!
    let session = ARSession()
    var arCameraTransform: simd_float4x4?
    let scnCamera = SCNNode()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        sceneKitView.scene = SCNScene()
        sceneKitView.backgroundColor = .black
        
        let cylinder = SCNCylinder(radius: 0.1, height: 1)
        cylinder.firstMaterial?.diffuse.contents = UIColor.red
        let node = SCNNode(geometry: cylinder)
        node.position.z = -0.75
        sceneKitView.scene?.rootNode.addChildNode(node)
        
        scnCamera.camera = SCNCamera()
        sceneKitView.scene?.rootNode.addChildNode(scnCamera)
        
        self.session.delegate = self
        self.session.run(ARWorldTrackingConfiguration())
    }
}

...

extension ViewController: ARSessionDelegate {
    
    func session(_ session: ARSession, didUpdate frame: ARFrame) {

        self.arCameraTransform = frame.camera.transform            
        scnCamera.simdTransform = self.arCameraTransform!   
        print(sceneKitView.pointOfView?.simdTransform.columns.3 as Any)
    }
}

附言

这适用于.landscape方向...


推荐阅读