gpt4 book ai didi

ios - 如何调用func渲染器(_ :didAdd:for:)

转载 作者:行者123 更新时间:2023-11-30 11:18:53 25 4
gpt4 key购买 nike

我正在开发一个使用 ARKit 和 CoreML 的 iOS 应用程序,该应用程序应该在识别出墙上的某个数字后添加一个 SCNNode。我现在面临的问题是我有两个函数同时竞争(一个函数搜索墙(renderer(_:didAdd:for:),另一个函数搜索数字(“classificationCompleteHandler”))。话虽如此,我只想要应用程序在某些条件后搜索并添加新的 ARAnchor 例如 if(lastNum != num && score > 0.90){ addNewARAnchor() } 。问题是我不知道应该在这个 func addNewARAnchor() 中添加什么。我的想法是添加负责添加新 ARAnchor 的函数,即func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) 但我不知道应该使用哪些参数!所以现在我有这样的东西:

func addNewARAnchor(){
if(lastNum != num && score >= 0.9){
// I don't know how to call renderer
}
}

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor){
//SCNNodes stuff
}

不知道这个方法是否有效!我虽然使用过线程,但我对此一无所知...如果您有任何想法,我非常欢迎您聆听!谢谢!

(如果您愿意,我可以编辑此内容并可以分享我的所有代码!)

最佳答案

函数

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

是一个委托(delegate)方法,因此您(通常)不会自己调用它。相反,将 session 的委托(delegate)设置为某个对象。然后,每当调用此函数时,都会运行一些代码:

guard let planeAnchor = anchor as? ARPlaneAnchor else { return }

然后将 anchor 保存在某个数组中,以便稍后添加到其中:

planeAnchors.append(planeAnchor)

最后,当您需要使用 anchor 时,请搜索数组并找到对您最有用的 anchor 。

<小时/>

编辑:如果您有一个名为 sceneView 的场景 View ,则可以通过在 View Controller (或任何其他类)中执行以下操作来设置其委托(delegate):

sceneView.delegate = self

然后,要访问 anchor ,只需执行以下操作:

let p = planeAnchors[0] // Or whichever anchor you want to access, you would just change the index

最后,向该 anchor 添加一个节点:

let node = SCNNode()
node.position = SCNVector3Make(p.center.x, 0, p.center.z)
// Rotate because SceneKit is rotated
node.eulerAngles.x = -.pi / 2
self.sceneView.addChildNode(node)

您可以根据您想要添加节点的方式/根据节点的类型稍微更改此代码。要点是您使用 anchor p.center.x 和 p.center.z 属性。

关于ios - 如何调用func渲染器(_ :didAdd:for:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51502304/

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