我使用 ARKit 和 SceneKit 在 AR 空间中放置了一些对象。效果很好。现在我想添加一个额外的相机(SCNCamera),它放置在场景中的其他位置,由一个常见的 SCNNode 连接和定位。它旨在从另一个(固定)角度向我展示当前场景。
现在我想在 i.Ex 上展示这个额外的 SCNCamera 提要。一个 SCNPlane (作为第一个漫反射材质) - 就像一个电视屏幕。当然,我知道它只会显示保持在相机焦点中的 SceneKit 内容,而不是 ARKit 图像的其余部分(当然,这只能由主相机实现)。一个简单的彩色背景就可以了。
我已经看过描述如何在 ARSpace 中的虚拟显示器上播放视频文件的教程,但我需要来自我自己当前场景的实时摄像头馈送。
我定义了这个对象:
let camera = SCNCamera()
let cameraNode = SCNNode()
然后在 viewDidLoad 我这样做:
camera.usesOrthographicProjection = true
camera.orthographicScale = 9
camera.zNear = 0
camera.zFar = 100
cameraNode.camera = camera
sceneView.scene.rootNode.addChildNode(cameraNode)
然后我调用我的设置函数将虚拟显示器放置在我所有的 AR 东西旁边,同时定位 cameraNode(指向对象在场景中停留的方向)
cameraNode.position = SCNVector3(initialStartPosition.x, initialStartPosition.y + 0.5, initialStartPosition.z)
let cameraPlane = SCNNode(geometry: SCNPlane(width: 0.5, height: 0.3))
cameraPlane.geometry?.firstMaterial?.diffuse.contents = cameraNode.camera
cameraPlane.position = SCNVector3(initialStartPosition.x - 1.0, initialStartPosition.y + 0.5, initialStartPosition.z)
sceneView.scene.rootNode.addChildNode(cameraPlane)
一切都编译并加载......显示显示在给定的位置,但它完全保持灰色。我放在场景中的 SCNCamera 根本没有显示任何内容。AR 场景中的其他一切都运行良好,只是我没有从该相机获得任何信息。
有没有人想办法让这种情况发挥作用?
为了更好地可视化,我添加了更多的打印屏幕。
下面显示了根据 ARGeo 的输入通过 SCNCamera 的图像。但它需要整个屏幕,而不是像我需要的那样在 SCNPlane 上显示其内容。
下一个打印屏幕实际上显示了我使用发布的代码获得的当前 ARView 结果。如您所见,灰色的 Display-Plane 仍然是灰色的 - 它什么也不显示。
最后一个打印屏幕是蒙太奇照片,显示了我想要的预期结果。
这怎么可能实现?我在这里错过了一些基本的东西吗?