You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ARSKView中调整相机FOV或实现缩小变焦效果?

针对ARSKView竖屏视场角过窄的实现方案

方案1:手动选择最大视场角的视频配置

ARKit默认的ARWorldTrackingConfiguration会自动选择适配性能的视频格式,部分场景下会优先选高分辨率裁切格式,等效触发1.5倍变焦。你可以手动筛选支持的最大视场角格式:

let config = ARWorldTrackingConfiguration()
// 按视场角从大到小排序,取第一个即为变焦倍数最小的1倍主摄配置
if let maxFOVFormat = ARWorldTrackingConfiguration.supportedVideoFormats.sorted(by: {
    $0.videoFieldOfView > $1.videoFieldOfView
}).first {
    config.videoFormat = maxFOVFormat
}
// 启动会话
yourARSKView.session.run(config)

方案2:直接设置相机最小缩放系数

iOS 13及以上系统支持直接调整ARKit相机的缩放参数,直接设为设备支持的最小缩放值即可获得1倍主摄效果:

// 可在ARSession启动完成后调用,或者在ARSessionDelegate的didUpdateCamera回调中调用
guard let currentFrame = yourARSKView.session.currentFrame else { return }
let minZoom = currentFrame.camera.minAvailableZoomFactor
yourARSKView.session.setCameraZoomFactor(minZoom, withAnimationDuration: 0)

注意:不要设置小于minAvailableZoomFactor或者大于maxAvailableZoomFactor的数值,否则会触发系统报错

方案3:自定义投影矩阵(适配特殊需求)

如果前两种方案无法满足你的视场角要求,可以手动修改相机投影矩阵自定义视场角:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    // 自定义视场角数值,系统1倍主摄竖屏视场角通常在60-70度区间,可按需调整
    let targetFOV: CGFloat = 65
    let customProjection = frame.camera.projectionMatrix(
        withViewportSize: yourARSKView.bounds.size,
        orientation: .portrait,
        zNear: 0.001,
        zFar: 1000,
        fieldOfView: targetFOV
    )
    yourARSKView.pointOfView?.camera?.projectionTransform = SCNMatrix4FromMat4(customProjection)
}

额外说明:如果你的应用需要支持横竖屏切换,记得在设备方向变更回调中重新计算投影矩阵或缩放系数,避免画面变形。

内容的提问来源于stack exchange,提问作者Senseful

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:27:06