ARImageAnchor 相对于 SCNNode 的方向

问题描述 投票:0回答:1

我当前的代码库提供了一个

pitch
相对于世界的方向(
yaw
roll
ARImageAnchor
)。我想要实现的是获取与开始会话后某个时间添加的节点相关的
ARImageAnchor
方向数据。

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode,
                                             for anchor: ARAnchor) {

     guard let _ = anchor as? ARImageAnchor else { return }
    
     DispatchQueue.main.async {

        let cylinderNode = SCNNode()
        cylinderNode.geometry = SCNCylinder(radius: 0.05, height: 0.4)
        node.addChildNode(cylinderNode)
        
        let ea: SCNVector3 = node.eulerAngles
        
        print(self.convert(ea.x), self.convert(ea.y), self.convert(ea.z))
    }
}

任何帮助将不胜感激!

swift augmented-reality scenekit arkit
1个回答
0
投票

您可以将

simd_float4x4 变换
的锚点orientation part 传递给您的模型(请注意,此数据存储在当前会话的每个 ARFrame 中)不包括位置:

import ARKit
import SceneKit

class ViewController : UIViewController, ARSCNViewDelegate {
    
    @IBOutlet var sceneView: ARSCNView!
    var model = SCNNode()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.delegate = self

        sceneView.scene = SCNScene(named: "ARScene")!
        model = sceneView.scene.rootNode.childNode(withName: "model", 
                                                recursively: true)!
    }
    
    @IBAction func passTransformButton(_ sender: UIButton) {

        if let trans = sceneView.session.currentFrame?.anchors[0].transform {

            model.simdTransform = trans

            model.simdTransform.columns.3.x = 0  // position X
            model.simdTransform.columns.3.y = 0  // position Y
            model.simdTransform.columns.3.z = 0  // position Z
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.