gpt4 book ai didi

swift - 如何让我的相机节点聚焦在点击的节点上? (场景套件)

转载 作者:可可西里 更新时间:2023-11-01 02:15:40 25 4
gpt4 key购买 nike

我创建了一个空节点并向该空节点添加了一组节点,最后将其添加到我的根节点。之后,我创建了一个相机节点,如下所示。我正在尝试向我的 scenekit 应用程序添加一个功能,当用户点击一个节点时,相机会移动并聚焦在该节点上。在我的 handleTap 函数中,我试图获取节点的位置,然后将相机固定到该位置,但它不起作用。有什么建议吗?

//snippet
var emptyNode = SCNNode()
emptyNode.addChildNode(Node)
rootNode.addChildNode(emptyNode)

cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(1,0,10)
rootNode.addChildNode(cameraNode)


func handleTap(recognizer: UITapGestureRecognizer) {
let location = recognizer.locationInView(sceneView)
let hits = sceneView!.hitTest(location, options: nil)

if let tap = hits.first?.node {
tappNode = tap
myScene?.cameraNode.position = tappNode.position
}

编辑

所以,我取得了一些进展,但我仍然无法弄清楚我的节点的位置。更新后的代码如下。我所做的是创建一个新节点并将相机连接到它。然后将该节点作为子节点添加到 tap 节点。我仍然无法在空节点的上下文中获取 tap 节点的位置。

let cameraNode = SCNNode()
cameraNode.name = "cameraNode"
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3Make(1,0,10)


tappNode.addChildNode(cameraNode)


SCNTransaction.begin()
SCNTransaction.setAnimationDuration(3.0)

SCNTransaction.setCompletionBlock() {
print("done")
}
sceneView!.pointOfView = cameraNode

SCNTransaction.commit()

最佳答案

当您将相机节点移动到点击节点(或在点击节点创建新相机)时,您几乎不可能从该相机看到点击节点。

怎么样

let lookAtConstraint = SCNLookAtConstraint.init(tappNode)
sceneView!.pointOfView.constraints = [lookAtConstraint]

保留对 lookAtConstraint 的引用,以便您可以在后续点击时更改其 target

关于swift - 如何让我的相机节点聚焦在点击的节点上? (场景套件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38797146/

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