【问题标题】:How do I make my camera node focus on a tapped node? (SceneKit)如何让我的相机节点聚焦在被点击的节点上? (场景套件)
【发布时间】:2016-12-12 08:04:12
【问题描述】:

我创建了一个空节点并将一组节点添加到空节点,最后将其添加到我的根节点。之后,我创建了一个相机节点,如下所示。我正在尝试向我的场景工具包应用程序添加一个功能,当用户点击一个节点时,相机会移动并聚焦在该节点上。在我的 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
            }

编辑

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

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()

【问题讨论】:

    标签: swift scenekit scnnode


    【解决方案1】:

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

    怎么样

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

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

    【讨论】:

      【解决方案2】:

      在我自己的应用程序中,我有一个“默认”观点作为 SCNNode,这是我在启动时定义的,例如

      默认点

      通过双击,用户重置到这个角度,就这样

      scnView.pointOfView = self.defaultPoint

      其中 scnView 是具有所有节点的主 SCNView。在您的情况下,我想您必须通过反复试验来定义一个或多个特定于节点的视点节点(显然与节点本身的坐标不同),然后设置场景视图相应的观点。

      PS 我的主 SCNView 已将 allowedCameraControl 设置为 true。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        相关资源
        最近更新 更多