沿着轴相对于摄像机位置移动节点

时间:2018-03-16 12:08:34

标签: ios swift arkit

我目前有一个rootNode,它附加了多个子节点,我希望将它们作为一个集群一起在场景中移动。我目前通过使用向左,向右,向上和向下按钮沿x轴和y轴移动它,每次单击按钮时一点一点地改变rootNode的位置,例如向左移动:

self.newRootNode.position.x = self.newRootNode.position.x - 0.01

这样,群集始终相对于初始化应用程序时设置的坐标系移动。每当他们改变位置时,我都试图让用户的左右移动。我试过这样做:

let nodeCam = self.sceneView.session.currentFrame!.camera
let cameraTransform = nodeCam.transform
self.newRootNode.position.x = cameraTransform.columns.3.x - 0.01

我知道这不是我想要的,我必须错过从相机位置到根节点位置的转换,但我不确定要采取什么步骤。 什么是正确的方法来解决这个问题?每次用户更换位置时是否需要重置跟踪?任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:0)

我相信您现在可以在ARSession的ARKit 1.5中使用此功能:

func setWorldOrigin(relativeTransform: matrix_float4x4)

其中:

  

使用指定的变换更改AR世界坐标空间的基础。

以下是一个示例(未经测试的),它可能指向正确的方向:

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

    guard let currentFrame = augmentedRealitySession.currentFrame?.camera else { return }
    let transform = currentFrame.transform
    augmentedRealitySession.setWorldOrigin(relativeTransform: transform )

}

当然不要忘记使用此ARSCNDebugOptions.showWorldOrigin 为了调试和调整矩阵和变换等。

您还可以将delegate callback中的代码用作IBAction等等。

希望它有所帮助...