我正在寻找改变AR会话中渲染内容的视野。显然我们不能改变原始相机FOV,但我认为应该可以改变渲染的SceneKit内容的视野。
在原始SceneKit SCNCamera中更改摄像机视野是微不足道的...但我不知道如何在ARSCNView中执行此操作。
答案 0 :(得分:0)
您可以访问pointOfView
的{{1}}属性(然后检索有效ARSCNView
)。
如果这不起作用(ARKit每帧都更改相机属性等),您可以随时使用SCNCamera
直接使用ARSession
来自行编写代码。< / p>
请注意,除非您的3D场景覆盖整个相机流,否则更改虚拟相机的FoV会破坏AR注册(对齐)。
答案 1 :(得分:0)
developer documentation for ARSession建议“如果您为AR内容构建自己的渲染器,则需要自己实例化并维护一个ARSession对象。”
此仓库执行此操作:https://github.com/hanleyweng/iOS-ARKit-Headset-View
答案 2 :(得分:0)
如果有以下代码,此代码将从ARSCNView
中检索照相机:
sceneView.scene.rootNode.childNodes.first(where: { $0.camera != nil})
请注意,这将返回相机的关联节点,如果要直接控制其位置或角度,则可能需要该节点。 SCNCamera
本身存储在节点的camera
属性中。
如果可以避免,最好不要触摸AR相机,因为它会弄乱世界模型和场景之间的关联。如果我想要一个控制系统,可以选择使用AR来跟踪设备的运动和角度,但又不必转换为实际坐标(即不显示相机供稿的VR应用),则偶尔会使用此技术。
基本上,只有在您使用AROrientationTrackingConfiguration
或类似的软件时,我才会这样做。
EDIT 我可能应该提到ARKit会覆盖相机的projectionTransform
属性,因此您可能无法手动设置fieldOfView
。我在设置xFov
和yFov
方面取得了一些成功,但是由于不推荐使用这些设置,因此您不应该依赖它们。