在ARKit中如何调整相机焦距

16
我想在增强现实中调整设备的物理相机对焦(我不是在谈论SCNCamera对象)。我在Apple Dev论坛帖子中读到,自动对焦会干扰ARKit的物体检测,这对我来说很有道理。
现在,我正在开发一个应用程序,用户将靠近他们正在观察的物体。相机默认的焦点使得当物体距离小于10厘米时,一切都看起来非常模糊。
我可以在初始化场景之前或最好在场景中调整相机的焦距吗?
< p > < em > 2018年1月20日 < /em > < br / > 显然,目前还没有解决这个问题的方法。您可以在此Reddit帖子此开发者论坛帖子中了解更多关于私有API解决方案和其他(非有帮助的)信息。< / p >

2018年1月25日
@AlexanderVasenin提供了一个有用的更新,指向了苹果的文档。它显示ARKit将能够支持iOS 11.3中的自动对焦,而不仅仅是聚焦。
请查看下面的我的使用示例。


你已经找到这个问题的解决方案了吗? - Adam Roszyk
不行。这篇帖子一直在得到点赞,但迄今为止没有人回答或评论,所以我猜现在没有解决办法。 - LinusGeffarth
1
大家好消息:https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration/2942262-isautofocusenabled - Alexander Vasenin
3个回答

4

正如Alexander所述,iOS 11.3为ARKit带来了自动对焦功能。
相应的文档网站展示了它的声明方式:

var isAutoFocusEnabled: Bool { get set }

您可以通过以下方式访问它:
var configuration = ARWorldTrackingConfiguration()
configuration.isAutoFocusEnabled = true // or false

然而,默认情况下它是true,所以您甚至不必手动设置它,除非您选择退出。


3

更新:从iOS 11.3开始,ARKit支持自动对焦,并且默认启用 (更多信息)。手动对焦仍然不可用。


iOS 11.3之前,ARKit既不支持手动对焦调整,也不支持自动对焦。

以下是苹果公司在该问题上的回复(2017年10月):

ARKit不支持启用自动对焦,因为它可能会对平面检测产生不利影响。已有一个功能请求来支持自动对焦,无需再提出其他请求。任何其他对焦差异都应作为错误报告提交。请确保包括设备型号和操作系统版本。(来源

在苹果论坛上有另一个线程,其中一位开发人员声称他能够通过调用ARKit使用的私有AVCaptureDevice上的AVCaptureDevice.setFocusModeLocked(lensPosition:completionHandler:)方法来调整自动对焦,而且似乎不会影响跟踪。虽然该方法本身是公开的,但ARKit的AVCaptureDevice不是,因此在生产中使用此方法很可能会导致应用商店拒绝。


谢谢?我的问题不是关于自动对焦的,而且我已经链接了解决方法。 - LinusGeffarth
@LinusGeffarth,我刚刚总结了你的发现,并在答案中进行了概述,以便其他开发人员更容易理解。如果您愿意,您也可以自己完成这项工作。 - Alexander Vasenin
感谢您的更新通知! - LinusGeffarth

0
    if #available(iOS 16.0, *) {
        // This property is nil on devices that aren’t equiped with an ultra-wide camera.
        if let device = ARWorldTrackingConfiguration.configurableCaptureDeviceForPrimaryCamera {
            do {
                try device.lockForConfiguration ()
                
                // configuration your focus mode 
                // you need to change  ARWorldTrackingConfiguration().isAutoFocusEnabled at the same time
                
                device.unlockForConfiguration ()
            } catch {
                
            }
        }
    } else {
        // Fallback on earlier versions
    }

使用configurableCaptureDeviceForPrimaryCamera方法,该方法仅适用于iOS 16或更高版本。
文档/ARKit/配置对象/ARConfiguration/configurableCaptureDeviceForPrimaryCamera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接