ARKIT 2.0图像检测:使用ARImageTrackingConfiguration找不到图像消失的时间

时间:2018-08-22 12:12:36

标签: ios swift xcode arkit

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

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

谢谢,凯文

3 个答案:

答案 0 :(得分:2)

ARImageAnchor符合ARTrackable Protocol,其中:

  

被ARKit类(例如ARFaceAnchor类)采用,   表示场景中的运动对象。

     

ARSCNView和ARSKView自动隐藏其锚点的节点   isTracked属性为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.

希望有帮助...

答案 1 :(得分:0)

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

1:成为AR Sceneview的委托后,您可以侦听锚点的添加/更新/删除https://developer.apple.com/documentation/arkit/arscnviewdelegate

尽管从他们提供的许多示例代码中可以很明显地看出,并且如果您已经添加了节点,那么您必须已经至少正在侦听其中一些方法。

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

来检查相机当前是否正在查看该节点是否已被删除。

答案 2 :(得分:0)

我发现最容易检查isHidden方法内的节点renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)属性。

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

相对于以前的锚侦听器技术,我无法说出这种性能。