Удаление плоскостиОпределение плоскостей предотвращает размещение дополнительных плоскостей - PullRequest
0 голосов
/ 12 апреля 2019

Я создаю самолеты, используя ARKit, и если я вручную удаляю самолет, я не могу обнаружить самолеты в том же положении.

Для обнаружения самолетов я установил конфигурацию сцены

 let config = ARWorldTrackingConfiguration()
        config.worldAlignment = .gravity
        config.providesAudioData = false
        config.isLightEstimationEnabled = true
       ...
        else if ARMode == .floor {
            self.ARMode = .floor
            scannerBox.isHidden=true
            focusNode?.isHidden=false
            plusButton.isHidden=true
            config.planeDetection = .horizontal            self.planeTexture="test.scnassets/Textures/Surface_Texture.png"
        }
        ...

        sceneView.session.run(config)

Добавить плоскость к сцене в функции рендерера

       let planeNode = self.createARPlaneNode(planeAnchor: planeAnchor,
                                                   color: UIColor.yellow.withAlphaComponent(0.5))

            node.addChildNode(planeNode)

Если на плоскости нажать определенную кнопку и удалить другие объекты

scene.rootNode.enumerateChildNodes { (node, _) in
        print(node.name)
        if (node.name == "sphere" ) {
            node.removeFromParentNode()
        }
         if ( node.name == "surfacePlane") {

                 node.removeFromParentNode()
           }

        if(node.name != nil){
            if (node.name?.contains("ProductModel_"))!  {
                node.removeFromParentNode()

            }
        }    
    }

Когда приведенный выше код запускает самолеты, сферы и продукты исчезают, как и ожидалось. Если я попытаюсь отсканировать поверхность в другом месте комнаты, она будет работать как положено, но если я попытаюсь отсканировать, где была плоскость, и сгенерировать новую, она не будет работать. Он не будет генерировать новый самолет, и если соседние самолеты расширяются, чтобы покрыть ту же область, они исчезают.

Я полагаю, что проблема, вероятно, в том, что геометрия сцены удаленных плоскостей все еще присутствует и препятствует появлению новых плоскостей в том же пространстве. Как временная работа вокруг меня и остановки и запуска сеансов AR, и это удаляет самолеты.

     let config = sceneView.session.configuration as!
        ARWorldTrackingConfiguration
        config.planeDetection = .horizontal
        sceneView.session.run(config,
                              options: [.resetTracking, .removeExistingAnchors])

Я пытаюсь определить, почему это так, и плоскости не обрабатываются так же, как объекты, которые я явно поместил в сцену.

...