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

我有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 ,它根本不起作用。

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

托比

设置视图以使用SCNView的“pointOfView”属性渲染场景。

scnView.pointOfView = cameraNodeLeft;

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

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

因此,使用@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社区的新手,因此我目前没有足够的声誉。)