【问题标题】:is it possible to recognise virtual image instead of real image using ARKit ? (iOS 12)是否可以使用 ARKit 识别虚拟图像而不是真实图像? (iOS 12)
【发布时间】:2019-06-02 01:22:49
【问题描述】:

我做过一些 AR 图像跟踪应用和 AR 世界跟踪应用。

AR Image Tracking 用于识别从相机捕获的物理地图上的图像。

有没有什么办法可以让AR Image Tracking识别出基本上是SCNPlane材质的虚拟“图像”?

如果有人能给我一些指导或建议,我们将不胜感激。

注意:对于这个项目,我在 ARWorldTrackingConfiguration 上使用检测图像)

【问题讨论】:

    标签: ios swift scenekit arkit


    【解决方案1】:

    我认为可能是的,可以通过将内容图像(您想在地图中检测到)添加到 Assets.xcassets 中。然后使用此代码检测如下虚拟图像:

    // 把你的图片名字放进去(withName: "namehere")

     lazy var mapNode: SCNNode = {
           let node = scene.rootNode.childNode(withName: "map", recursively: false)
            return node
        }()
    
    // Now When detecting Images 
    
    
    extension ViewController: ARSCNViewDelegate {
    
            func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
                DispatchQueue.main.async {
                    guard let imageAnchor = anchor as? ARImageAnchor,
                        let imageName = imageAnchor.referenceImage.name else { return }
    
                    // TODO: Comment out code
                    //            let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
                    //            planeNode.opacity = 0.0
                    //            planeNode.eulerAngles.x = -.pi / 2
                    //            planeNode.runAction(self.fadeAction)
                    //            node.addChildNode(planeNode)
    
                    // TODO: Overlay 3D Object
                    let overlayNode = self.getNode(withImageName: imageName)
                    overlayNode.opacity = 0
                    overlayNode.position.y = 0.2
                    overlayNode.runAction(self.fadeAndSpinAction)
                    node.addChildNode(overlayNode)
    
                    self.label.text = "Image detected: \"\(imageName)\""
                }
            }
    
            func getPlaneNode(withReferenceImage image: ARReferenceImage) -> SCNNode {
                let plane = SCNPlane(width: image.physicalSize.width,
                                     height: image.physicalSize.height)
                let node = SCNNode(geometry: plane)
                return node
            }
    
            func getNode(withImageName name: String) -> SCNNode {
                var node = SCNNode()
                switch name {
                case "map":
                    node = mapNode
    
                default:
                    break
                }
                return node
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 2018-12-13
      • 2019-05-12
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2011-12-30
      相关资源
      最近更新 更多