节点的世界位置始终是原点 - ARKit 锚点
Node's world position is always are origin - ARKit anchor
我只是在检测到平面并将其添加到我的 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 总是 returns SCNVector3(x: 0.0, y: 0.0, z: 0.0)。看起来像当地的位置。只有锚给出了它各自的世界位置。我希望能够根据世界变换来变换节点。
提前致谢。
tldr:在 renderer(_:didUpdate:for:)
中打印 node.worldPosition
您正在使用 renderer(_:didAdd:for:)
。将此视为您最初响应新锚点上的新节点的地方。新节点尚未更新相关信息。像您一样向这个新节点添加子平面将是一个很好的回应。
相比之下,renderer(_:didUpdate:for:)
用于响应节点上的实际更新。这是我们看到先前添加的节点按预期运行的时候。这就是您看到意外值的原因。
我只是在检测到平面并将其添加到我的 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 总是 returns SCNVector3(x: 0.0, y: 0.0, z: 0.0)。看起来像当地的位置。只有锚给出了它各自的世界位置。我希望能够根据世界变换来变换节点。 提前致谢。
tldr:在 renderer(_:didUpdate:for:)
node.worldPosition
您正在使用 renderer(_:didAdd:for:)
。将此视为您最初响应新锚点上的新节点的地方。新节点尚未更新相关信息。像您一样向这个新节点添加子平面将是一个很好的回应。
相比之下,renderer(_:didUpdate:for:)
用于响应节点上的实际更新。这是我们看到先前添加的节点按预期运行的时候。这就是您看到意外值的原因。