在新的arkit 2.0文档中,它解释了:并可以准确地跟踪图像何时从视图中消失(或随后重新出现)
如何通知我该图像没有可见的记录器? 我找不到有关它的文档。
谢谢,凯文
答案 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")
}
}
相对于以前的锚侦听器技术,我无法说出这种性能。