在 ARSKView 中更改相机 FOV(或缩小)?

Change camera FOV (or zoom out) in ARSKView?

我正在使用 ARSKView,它融合了 2D SpriteKit 和 3D ARKit。当它显示相机 AR 体验时,我注意到相机的视野有点窄(在人像模式下)。相当于内置相机应用程序的 1.5 倍变焦。

我想缩小或扩大视野……即使它只是内置相机应用程序允许的相同 1 倍分辨率。

有什么办法吗?

如果视频在 ARSKView 中放大显示,很可能是因为它的帧大小在一个维度上太大,并且它本质上是在尝试进行纵横比填充效果,这会导致其中一个维度放大。


确保 scene.scaleMode.resizeFill1。接下来,确保 ARSKView width / height 比率与 configuration.videoFormat.imageResolution 完全相同(如果在纵向模式下交换宽度和高度)。

在我的例子中,我在纵向模式下使用 phone 并使用后置摄像头。 configuration.videoFormat.imageResolution 是 1920 x 1440。因为它是纵向的,所以我记下了 1440 x 1920 的尺寸(即我把它倒过来了)。接下来我计算了比率:1440 / 1920 = 0.75。因此,在水平方向有 414 个像素的 iPhone 11 上,我需要确保 ARSKView 的高度为 552。因为 414 / 552 = 0.75.

如果我的 ARSKView 高度太小(例如 207),这会使比例太大(例如 414 / 207 = 2)。在这种情况下,视频的整个宽度都可以正常显示,但视频的顶部和底部将被裁剪掉。

如果我的 ARSKView 高度太大(例如 828),这会使比例太小(例如 414 / 828 = 0.5)在这种情况下,我最终会看到视频的整个垂直部分,但水平部分部分将被放大以保持纵横比。


1 其他填充纵横比,如 .fill.aspectFill 也可能适用于您的用例,但您可能想要不惜一切代价避免 .aspectFit ,它的行为非常奇怪,无论视图大小如何,都不会向您显示完整的视频分辨率。当您将 ANSKView 的高度从 0 调整到更大时,您会注意到它同时裁剪了视频的垂直和水平部分,一旦达到 552,它就会停止显示(从未达到完整的视频分辨率),并且而是进入缩放,然后添加一个奇怪的黑条以进一步覆盖垂直尺寸。它还几乎一直在垂直和水平维度上出现黑条,导致用户体验不佳。