Изменить происхождение мира на существующий узел в сцене в ARKit - PullRequest
0 голосов
/ 23 мая 2018

Мое приложение имеет ARSCNView и распознает изображение с обнаружением изображения. Цель состоит в том, чтобы найти изображение и, как только оно будет распознано, изменить мировое положение на его центр

Что-то не работает.Любая помощь будет принята с благодарностью!

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

    guard let imageAnchor = anchor as? ARImageAnchor else {return}

    if let imageName = imageAnchor.referenceImage.name  {
        switch imageName {
            case "myImage":

            //OK, the image gets recognized

            let refSphere = SCNSphere(radius: 0.02)
            let refNode = SCNNode(geometry: refSphere)
            refSphere.firstMaterial?.diffuse.contents = UIColor.red.withAlphaComponent(0.8)
            node.addChildNode(refNode) // OK, there's a sphere representation on top of the recognized image

            sceneView.session.pause()
            self.sceneView.session.setWorldOrigin(relativeTransform: node.simdTransform) // Trying to move the world Origin to the center of recognized image
            sceneView.session.run(configuration, options: [.resetTracking])

            let box = SCNBox(width: 0.05, height: 0.05, length: 0.05, chamferRadius: 0.01)
            let boxNode = SCNNode(geometry: box)

            box.firstMaterial?.diffuse.contents = UIColor.green.withAlphaComponent(0.9)
            boxNode.position = SCNVector3(0,0,0)

            sceneView.scene.rootNode.addChildNode(boxNode)  // Not OK - I was expecting to have world Origin in the center of the recognized image and a green box on top of it

        default:
            print("other")
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Не знаю, относится ли оно к вам по-прежнему, но после изменения источника мира с помощью self.sceneView.session.setWorldOrigin вы возобновляете сеанс с параметром .resetTracking, который задает местоположение вашего мира в месте расположения камеры.

Избавление от этой опции должно помочь.

0 голосов
/ 24 мая 2018

Я сделал это так:

self.sceneView.session.setWorldOrigin(relativeTransform: imageAnchor.transform)
...