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")
}
}
我不能说这个与以前的锚点侦听器技术相比的性能。
在新的 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")
}
}
我不能说这个与以前的锚点侦听器技术相比的性能。