【发布时间】:2022-01-03 22:18:27
【问题描述】:
我正在使用ARSKView,它将 2D SpriteKit 与 3D ARKit 混合在一起。当它显示相机 AR 体验时,我注意到相机的视野有点窄(在纵向模式下)。相当于内置相机应用中的 1.5 倍变焦。
我想缩小或扩大视野......即使它只是内置相机应用程序允许的 1 倍分辨率。
有什么办法吗?
【问题讨论】:
标签: ios camera sprite-kit arkit
我正在使用ARSKView,它将 2D SpriteKit 与 3D ARKit 混合在一起。当它显示相机 AR 体验时,我注意到相机的视野有点窄(在纵向模式下)。相当于内置相机应用中的 1.5 倍变焦。
我想缩小或扩大视野......即使它只是内置相机应用程序允许的 1 倍分辨率。
有什么办法吗?
【问题讨论】:
标签: ios camera sprite-kit arkit
如果视频在 ARSKView 中显示为放大,很可能是因为它的帧尺寸在一个维度上太大,并且它本质上是在尝试做一个方面填充效果,这会导致其中一个维度被放大。
确保scene.scaleMode 是.resizeFill1。接下来,确保 ARSKView width / height 的比例与 configuration.videoFormat.imageResolution 完全相同(如果在纵向模式下交换宽度和高度)。
就我而言,我在纵向模式下使用手机并使用后置摄像头。 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,它将停止显示(从未达到完整的视频分辨率),并且而是进行缩放,然后添加一个奇怪的黑条以进一步覆盖垂直维度。它还几乎一直在垂直和水平维度上都有黑条,导致用户体验不佳。
【讨论】: