我有一个简单的SCNNode,我想将其放置在实际位置中,该节点对应于具有已知坐标的地标。我想将SCNNode保持在其位置,但是它倾向于随相机一起移动。我不能使用平面检测或命中测试将节点放置在真实世界中,而只能使用真实世界坐标。我当前的解决方案使用SCNNodes世界转换创建了一个Aranchor。
showNode(node: Node, location: convertedPoint)
let anchor = ARAnchor(transform: Node.simdWorldTransform)
self.sceneView.session.add(anchor: anchor)
我认为这足以锚定该节点。是否有一种无需使用平面检测或命中测试即可锚定节点的解决方案?
谢谢
首先,即使您用锚点稳定节点,也永远不会是完美的,只是更好。
但是,虽然在您告诉它的坐标处创建了一个ARAnchor,但是要稳定的节点实际上并未放置在该锚点中。
[您需要在renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor)
中实现ARSCNViewDelegate
函数并返回您希望由锚点稳定的目标节点(或者,您可以通过实现[ C0]函数)。
如果您的renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)
对象可作为ViewController中的属性使用,那么非常愚蠢的实现可能是这样的:
nodeToBeStabilized