ARKIT 2.0 图像检测:当图像使用 ARImageTrackingConfiguration 消失时无法找到

ARKIT 2.0 Image Detection : can't find when image disappear with ARImageTrackingConfiguration

在新的 arkit 2.0 文档中,它解释:并且可以准确跟踪图像何时从视图中消失(或之后重新出现)

如何通知我图像不可见? 我找不到有关它的文档。

谢天谢地,凯文

我认为您的问题有 2 个可能的答案,但根据目前提供的详细信息,我不能完全确定哪一个可以解决您的问题:

1:成为AR Sceneview的delegate可以监听anchoraddition/updates/removalhttps://developer.apple.com/documentation/arkit/arscnviewdelegate

不过,从他们提供的许多示例代码中可以清楚地看出这一点,如果您已经在添加节点,那么您一定已经听过至少其中一些方法。

2:您可能只需要通过调用渲染器的 isNode(_:insideFrustumOf:) https://developer.apple.com/documentation/scenekit/scnscenerenderer/1522647-isnode

一个ARImageAnchor符合ARTrackable Protocol,其中:

is adopted by ARKit classes, such as the ARFaceAnchor class, that represent moving objects in a scene.

ARSCNView and ARSKView automatically hide the nodes for anchors whose isTracked property is false.

您可以阅读更多相关信息 here

因此你可以做这样的事情来检查你的图像是否可见:

//--------------------------
//MARK: -  ARSessionDelegate
//--------------------------

extension ViewController: ARSessionDelegate{

    func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {

        //1. Enumerate Our Anchors To See If We Have Found Our Target Anchor
        for anchor in anchors{

            if let imageAnchor = anchor as? ARImageAnchor, imageAnchor == targetAnchor{

                //2. If The ImageAnchor Is No Longer Tracked Then Handle The Event
                if !imageAnchor.isTracked{

                }else{


                }
            }
        }
     }
}

其中 targetAnchor 只是一个 ARImageAnchor 我已将引用存储为 Global Variable.

希望对您有所帮助...

我发现在 renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) 方法中检查节点 isHidden 属性 最简单。

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    if node.isHidden {
        print("Node is out of view")
    }
}

我不能说这个与以前的锚点侦听器技术相比的性能。