在不支持ARKit的设备上使用ARSCNView

时间:2017-09-08 12:00:37

标签: ios swift arkit arscnview

是否可以使用ARSCNView,为ARWorldTrackingConfiguration配置支持它的设备,并为不支持它的设备配置另一种方式(使用A8芯片及更低版本)并且仍然在后台播放视频?

if ARWorldTrackingConfiguration.isSupported{
    let config=ARWorldTrackingConfiguration()
    config.planeDetection = .horizontal
    sceneView.session.run(config)
}else if AROrientationTrackingConfiguration.isSupported{
    let config=AROrientationTrackingConfiguration()
    sceneView.session.run(config)
}else{
    print("not supported")
    //what here?  <<<
}

2 个答案:

答案 0 :(得分:3)

您需要正在运行ARSession才能将摄像头视频提供给ARSCNView,要运行ARSession您需要支持的ARConfiguration,并且所有配置都需要A9。

但是,如果您的A9以下后备计划是让SceneKit视图无法获得任何ARKit的动态追踪......那么您就不需要ARKit。只需使用常规的SceneKit视图(SCNView)。要使相机Feed显示在SceneKit内容后面,请找到所需相机的AVCaptureDevice,然后将其传递到您所在场景的background . contents。视图。

(使用捕获设备作为SceneKit背景是iOS 11中的新功能。它似乎不在文档中(但是?),但它描述的是in the WWDC17 SceneKit session。)< / p>

顺便说一句,没有任何设备支持方向跟踪但不支持世界跟踪,因此您问题中的多分支if语句有点矫枉过正。

答案 1 :(得分:0)

下面的代码可以解决此问题,它可能是损坏的代码

let device = sceneView.device!
let maskGeometry = ARSCNFaceGeometry(device: device)!
mask = Mask(geometry: maskGeometry, maskType: maskType)

替换为

    let device = MTLCreateSystemDefaultDevice()
    let maskGeometry = ARSCNFaceGeometry(device: device!)!
    mask = Mask(geometry: maskGeometry)