ARKit对象随机摆动

时间:2019-01-28 13:11:33

标签: ios swift ipad scenekit arkit

在我们的arkit项目中,对象开始摆动。我们尝试使用较旧的代码,该代码在出现此问题之前效果很好,但是这种摇摆并没有停止。
我们启用了debug选项来显示原点,该原点也会摆动。我们尝试将我们的应用程序与不同的设备(iphone XS,Ipad pro 2018,ipad 2018,均带有ios 12.1.3)和对象一起使用。
跟踪图像的尺寸正确。

这是我们的配置(快速):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else { return }
    let configuration = ARWorldTrackingConfiguration()
    configuration.detectionImages = referenceImages
    configuration.maximumNumberOfTrackedImages = 2
    let options: ARSession.RunOptions = [.resetTracking, .removeExistingAnchors]
    sceneView.session.run(configuration, options: options)
    sceneView.delegate = self
}

这是我们的渲染器:

 func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        guard let imageAnchor = anchor as? ARImageAnchor else { return }
        let referenceImage = imageAnchor.referenceImage
        let imageName = referenceImage.name ?? "no name"


        let plane = SCNPlane(width: referenceImage.physicalSize.width, height: referenceImage.physicalSize.height)
        let planeNode = SCNNode(geometry: plane)
        plane.firstMaterial?.diffuse.contents = UIColor(white: 1, alpha: 0) //make the plane invisable

        let obj = SCNScene(named: "art.scnassets/obj.scn")!
        let objNode = obj.rootNode.childNodes.first!
        objNode.position = SCNVector3Zero
        objNode.eulerAngles.y = 90
        planeNode.addChildNode(objNode)
        node.addChildNode(planeNode)
    }

任何人都可以帮助阻止摆动吗?

1 个答案:

答案 0 :(得分:0)

问题在于:“世界跟踪是一门不精确的科学。此过程通常可以产生令人印象深刻的准确性,从而带来逼真的AR体验。但是,它依赖于设备物理环境的细节,这些细节并不总是一致的,或者很难做到实时测量而不会出现一定程度的错误。要建立高质量的AR体验,请注意这些注意事项和提示”。 来自

  

来自Understanding World Tracking in ARKit

要获得更好的AR体验,请为您的应用提供适当的物理环境,良好的照明,有纹理的地板等。 希望对您有帮助!