0

在我检测到平面并将平面添加到我的 AR 场景后,我只是想找到节点的世界位置和旋转。

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
  if !(anchor is ARPlaneAnchor) {
        return
    }
  let plane = //to visualise planes
  node.addChildNode(plane)
  print("Node : \(node.worldPosition)"
 }

但是 node.worldPosition 总是返回一个 SCNVector3(x: 0.0, y: 0.0, z: 0.0)。看起来像当地的立场。只有锚给出了其各自的世界位置。我希望能够根据世界变换来变换节点。提前致谢。

4

1 回答 1

0

tldr:node.worldPosition在里面打印renderer(_:didUpdate:for:)

您正在使用renderer(_:didAdd:for:). 将此视为您最初响应新锚点上的新节点的位置。新节点尚未更新相关信息。像您所做的那样向这个新节点添加一个子平面将是一个很好的响应。

相反,renderer(_:didUpdate:for:)用于响应节点上的实际更新。这是我们看到之前添加的节点的行为符合我们预期的时候。这就是为什么您会看到意想不到的值。

于 2019-09-06T06:10:19.510 回答