1

QLPreviewController用来展示 AR 内容。对于带有 LIDAR 的较新 iPhone,似乎默认情况下启用了对象遮挡。

有什么方法可以在 QLVideoController 中禁用对象遮挡,而无需构建自定义 ARKit 视图控制器?由于我的模型非常大(真人大小的建筑物),它们似乎最终会消失或被切断。

4

1 回答 1

1

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 OcclusionA12 和更高版本的芯片组支持的内容。如果您运行的是 iOS 12 及更高版本,它就可以工作。


附言

QuickLook 的唯一可定制对象是来自类ARQuickLookPreviewItem的对象。

当您想要控制背景、指定共享表共享的内容或禁用缩放以防止用户缩放特定模型时,请使用 ARQuickLookPreviewItem 类。

于 2021-05-04T06:33:22.443 回答