SCNNode未锚定在真实世界的坐标上

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

我有一个简单的SCNNode,我想将其放置在实际位置中,该节点对应于具有已知坐标的地标。我想将SCNNode保持在其位置,但是它倾向于随相机一起移动。我不能使用平面检测或命中测试将节点放置在真实世界中,而只能使用真实世界坐标。我当前的解决方案使用SCNNodes世界转换创建了一个Aranchor。

showNode(node: Node, location: convertedPoint)
let anchor = ARAnchor(transform: Node.simdWorldTransform)
self.sceneView.session.add(anchor: anchor)

我认为这足以锚定该节点。是否有一种无需使用平面检测或命中测试即可锚定节点的解决方案?

谢谢

swift scenekit arkit
1个回答
0
投票

首先,即使您用锚点稳定节点,也永远不会是完美的,只是更好。

但是,虽然在您告诉它的坐标处创建了一个ARAnchor,但是要稳定的节点实际上并未放置在该锚点中。

[您需要在renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor)中实现ARSCNViewDelegate函数并返回您希望由锚点稳定的目标节点(或者,您可以通过实现[ C0]函数)。

如果您的renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)对象可作为ViewController中的属性使用,那么非常愚蠢的实现可能是这样的:

nodeToBeStabilized
© www.soinside.com 2019 - 2024. All rights reserved.