gpt4 book ai didi

swift - 如何根据按钮按下时设备中心的位置将节点添加到 ARKit 场景?

转载 作者:行者123 更新时间:2023-12-04 12:59:25 29 4
gpt4 key购买 nike

完成快速初学者努力通过点击按钮向场景添加节点。

我知道我可以使用点击手势来获取点击坐标并执行点击测试,然后在点击的 3D 空间中放置一个对象。但是,我想在设备屏幕的中央显示一个球体或十字准线,当点击屏幕底部的按钮时,具有相同的行为,即获取点击手势将提供的相同信息。(至少我认为这是我需要在这里做,我不确定。)

加载场景后,我将一个小球体添加到相机视点的子节点,如下所示:

sphereNode = SCNNode(geometry: SCNSphere(radius: 0.020))
sphereNode?.position = SCNVector3Make(0, 0, -2)
sceneView.pointOfView?.addChildNode(sphereNode!)

这会将球体放置在屏幕中央,稍微在相机前面。当我在房间周围移动设备时,球体按预期保持在中间。我希望能够点击一个按钮,然后获取点击手势将提供的信息,以便执行 HitTest 并在该位置的场景中放置一个新球体。除非有另一种更好的方法来做到这一点?

我正在寻找的行为与 iOS 测量应用程序的行为非常相似。测量点始终位于屏幕中央,然后在点击添加新点时添加。

最佳答案

您的使用方法 hitTest(_:types:)是要走的路。我认为链接了一个,来自 ARSession ,是最直接的。

由于您想从屏幕中心点击测试,而 CGPoint hitTest(_:types:) 预期的参数在标准化坐标空间中,从 (0.0, 0.0) 到 (1.0, 1.0),您需要做的就是通过 (0.5, 0.5)。

这是一些代码:

func buttonAction() {
guard let currentFrame = session.currentFrame,
let hitTest = currentFrame.hitTest(CGPoint(x: 0.5, y: 0.5), types: .featurePoint).last else {
return
}
let anchor = ARAnchor(transform: hitTest.worldTransform)
session.add(anchor: anchor)
}

添加 anchor 后,可以使用 ARSCNViewDelegate添加节点的方法 renderer(_:nodeFor:) .基本上,当您向 session 添加 anchor 时,将调用此方法。

顺便说一句,因为您似乎正在使用 ARSCNView ,您可以像这样访问您的 AR session sceneView.session .

关于swift - 如何根据按钮按下时设备中心的位置将节点添加到 ARKit 场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60687435/

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