如何在Scene Kit中为同一场景使用多个摄像头

时间:2015-01-01 19:54:18

标签: ios objective-c swift scenekit

我有2个SCNViews彼此相邻,两个都应该显示相同的场景,但通过不同的相机。 在我看来,Scene Kit使用该节点与节点层次结构中最高的相机,所以我尝试了类似的东西

    leftSceneView.scene?.rootNode.addChildNode(scene.rootNode)
    rightSceneView.scene?.rootNode.addChildNode(scene.rootNode)

    leftSceneView.scene?.rootNode.addChildNode(cameraNodeLeft)
    rightSceneView.scene?.rootNode.addChildNode(cameraNodeRight)

但是我收到了错误消息[SCNKit ERROR] removing the root node of a scene from its scene is not allowed,但它根本不起作用。

有人建议我如何实现这个目标吗?

托比

3 个答案:

答案 0 :(得分:10)

这个答案关注的问题(由@WolfLink提到),让多个SCNView对象与不同的摄像头显示相同的SCNScene会导致整个更新序列多次出现。

要解决此问题,您只需将SCNSceneRendererDelegate设置为仅使用一个的SCNView对象。假设委托正在处理SCNScene中的所有节点并相应地更新它们,那么没有指定委托的其他SCNView对象仍然能够看到发生的所有变化。这是因为更改在实际的SCNScene中更新,所有SCNView对象都连接到了。

因此,使用@Toyos的原始答案,使用2台摄像机而不会导致整个更新序列两次点火的方法是:

// Set up sceneView 1
sceneView1.scene = scnScene
sceneView1.pointOfView = scnScene.camera1
sceneView1.delegate = scnScene

// Set up sceneView 2
sceneView2.scene = scnScene
sceneView2.pointOfView = scnScene.camera2

(免责声明:我将对@Toyos的答案发表评论,但由于我还是StackOverflow社区的新手,我目前还没有足够的声誉。)

答案 1 :(得分:8)

设置视角以使用" pointOfView"渲染场景。 SCNView的属性。

scnView.pointOfView = cameraNodeLeft;

答案 2 :(得分:0)

        SCNTransaction.animationDuration = 1.0
        scnView.defaultCameraController.frameNodes([node])
        let newPositoin = SCNVector3(node.boundingSphere.center.x, 0, nodeShereRadius*2)
        cameraNode.position = newPositoin
        scnView.pointOfView = cameraNode
        SCNTransaction.commit()