gpt4 book ai didi

swift - 未调用方法renderer(_:didAdd节点:,用于 anchor :)

转载 作者:行者123 更新时间:2023-11-28 07:30:00 28 4
gpt4 key购买 nike

我试着用我的AR经验来实现飞机探测。
我有一个扩展名为ARSCNViewARSCNViewDelegate子类。
调用了我的委托方法。然而,我从未见过调用我的cameraDidChangeTrackingState方法。知道吗?

class ARView: ARSCNView {

override init(frame: CGRect, options: [String : Any]? = nil) {
super.init(frame: frame, options: options)
let sessionConfig = ARWorldTrackingConfiguration()
sessionConfig.planeDetection = [.horizontal]
self.session.run(sessionConfig)
self.delegate = self
}
}

extension ARView: ARSCNViewDelegate{

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
//add childNodes to the node here....
//but, this method doesn't get called
}
}

编辑:我可以找到ARPlaneAnchors renderer(_:didAdd node:, for anchor:),但我不确定是否应该使用这个,因为在大多数(也是Apples)示例中,它们向锚节点添加对象,如上面代码中所示。还是我必须自己触发d session(_ session: ARSession, didAdd anchors: [ARAnchor])方法?

最佳答案

此函数是一个实例方法。您需要将会话的委托设置为对象,然后将锚保存在数组中。如果需要使用任何锚定,只需搜索数组并找到对您有用的锚定。

sceneView.delegate = self

func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor) {

guard let planeAnchor = anchor as? ARPlaneAnchor else {
fatalError()
}
planeAnchor.addPlaneNode(on: node,
contents: UIColor.arBlue.withAlphaComponent(0.5))

// let virtualNode = VirtualObjectNode()
// DispatchQueue.main.async(execute: {
// node.addChildNode(virtualNode)
// })
}

let anchorsArray = planeAnchor[2]
let node = SCNNode()
node.position = SCNVector3Make(anchorsArray.center.x,
0,
anchorsArray.center.z)

希望这有帮助。

关于swift - 未调用方法renderer(_:didAdd节点:,用于 anchor :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173954/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com