在不支持 ARKit 的设备上使用 ARSCNView
Use an ARSCNView on devices that don't support ARKit
是否可以使用 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? <<<
}
您需要一个 运行 宁 ARSession
来将相机馈送驱动到一个 ARSCNView
,到 运行 一个 ARSession
您需要一个支持的 ARConfiguration
,所有配置都需要 A9。
但是,如果您的低于 A9 的后备计划是拥有一个不获取任何 ARKit 运动跟踪的 SceneKit 视图……您不需要 ARKit。只需使用常规 SceneKit 视图 (SCNView
)。要使相机源显示在您的 SceneKit 内容后面,请找到您想要的相机的 AVCaptureDevice
,并将其传递给视图中场景的 background
.
contents
。
(使用捕获设备作为 SceneKit 背景是 iOS 11 中的新功能。它似乎没有出现在文档中(还没有?),但它被描述 in the WWDC17 SceneKit session。)
顺便说一句,没有任何设备支持方向跟踪但不支持世界跟踪,因此您问题中的多分支 if
语句有点矫枉过正。
下面的代码解决了这个问题,它可能是错误的代码
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)
是否可以使用 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? <<<
}
您需要一个 运行 宁 ARSession
来将相机馈送驱动到一个 ARSCNView
,到 运行 一个 ARSession
您需要一个支持的 ARConfiguration
,所有配置都需要 A9。
但是,如果您的低于 A9 的后备计划是拥有一个不获取任何 ARKit 运动跟踪的 SceneKit 视图……您不需要 ARKit。只需使用常规 SceneKit 视图 (SCNView
)。要使相机源显示在您的 SceneKit 内容后面,请找到您想要的相机的 AVCaptureDevice
,并将其传递给视图中场景的 background
.
contents
。
(使用捕获设备作为 SceneKit 背景是 iOS 11 中的新功能。它似乎没有出现在文档中(还没有?),但它被描述 in the WWDC17 SceneKit session。)
顺便说一句,没有任何设备支持方向跟踪但不支持世界跟踪,因此您问题中的多分支 if
语句有点矫枉过正。
下面的代码解决了这个问题,它可能是错误的代码
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)