我QLPreviewController
用来展示 AR 内容。对于带有 LIDAR 的较新 iPhone,似乎默认情况下启用了对象遮挡。
有什么方法可以在 QLVideoController 中禁用对象遮挡,而无需构建自定义 ARKit 视图控制器?由于我的模型非常大(真人大小的建筑物),它们似乎最终会消失或被切断。
我QLPreviewController
用来展示 AR 内容。对于带有 LIDAR 的较新 iPhone,似乎默认情况下启用了对象遮挡。
有什么方法可以在 QLVideoController 中禁用对象遮挡,而无需构建自定义 ARKit 视图控制器?由于我的模型非常大(真人大小的建筑物),它们似乎最终会消失或被切断。
ARQuickLook
是一个为快速和高质量的 AR 可视化而构建的库。它采用 RealityKit 引擎,因此这里支持的所有功能,如遮挡、锚点、光线跟踪阴影、物理、DoF、运动模糊、HDR 等,看起来都与 RealityKit 中的外观相同。
但是,您不能在 QuickLook 的 API 中打开on
/这些功能。如果您的 iPhone 支持,off
它们是默认设置的。on
如果你想打开on
/ off
People Occlusion,你必须使用 ARKit/RealityKit 框架,而不是 QuickLook。
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let box = try! Experience.loadBox()
arView.scene.anchors.append(box)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.switchOcclusion()
}
fileprivate func switchOcclusion() {
guard let config = arView.session.configuration as?
ARWorldTrackingConfiguration
else { return }
guard ARWorldTrackingConfiguration.supportsFrameSemantics(
.personSegmentationWithDepth)
else { return }
switch config.frameSemantics {
case [.personSegmentationWithDepth]:
config.frameSemantics.remove(.personSegmentationWithDepth)
default:
config.frameSemantics.insert(.personSegmentationWithDepth)
}
arView.session.run(config)
}
}
请特别注意People Occlusion
A12 和更高版本的芯片组支持的内容。如果您运行的是 iOS 12 及更高版本,它就可以工作。
附言
QuickLook 的唯一可定制对象是来自类ARQuickLookPreviewItem的对象。
当您想要控制背景、指定共享表共享的内容或禁用缩放以防止用户缩放特定模型时,请使用 ARQuickLookPreviewItem 类。