Как переключаться между SCNScene в отслеживании и обнаружении изображений? - PullRequest
0 голосов
/ 12 мая 2019

У меня есть код записи для отслеживания автомобильного колеса, и когда колесо обнаружило объект SCNScene, ".scn" помещаются автоматически

Теперь я попытался добавить еще несколько опций, чтобы заменить автоматически помещенное колесо новым колесом ".scn".объект

но я всегда получаю сообщение об ошибке: старый размещенный объект ".scn" не изменяется

 override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        let configuration = ARImageTrackingConfiguration()

        guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {
            print("No images available")
            return
        }
        configuration.trackingImages = trackedImages
        configuration.maximumNumberOfTrackedImages = 1

        sceneView.session.run(configuration)
    }
 func renderer( _ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
        if let imageAnchor = anchor as? ARImageAnchor {
            let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
            plane.firstMaterial?.diffuse.contents = UIColor(white: -1, alpha: 0.8)
            plane.cornerRadius = 0.7
            let planeNode = SCNNode(geometry: plane)
            planeNode.eulerAngles.x = -.pi / 2
            let  jantScene = SCNScene(named: "art.scnassets/wheel.scn")
            self.jantNode = jantScene?.rootNode.childNode(withName: "wheel", recursively: true)
            jantNode.position = SCNVector3Zero
            jantNode.position.z = 0.01
            jantNode.scale = SCNVector3(x: 0.01225, y: 0.01225, z: 0.01225)
            planeNode.addChildNode(jantNode)
            node.addChildNode(planeNode)
        }
        return node
    }

, когда я нажимаю на объект кнопки, добавленный, но старый объект не удаляется


  @objc func buttonClicked(sender : UIButton){
         let plane = SCNPlane(width: 0.7, height:  0.7)
         plane.firstMaterial?.diffuse.contents = UIColor(white: -1, alpha: 0.8)
        plane.cornerRadius = 0.7
         let planeNode = SCNNode(geometry: plane)
        planeNode.eulerAngles.x = -.pi / 2
         jantScene = SCNScene(named: availableWheels[1])!
          newjantNode = self.jantScene?.rootNode.childNode(withName: "wheel", recursively: true)!
         newjantNode.position = SCNVector3Zero
            newjantNode.position.z = 0.01
          newjantNode.scale = SCNVector3(x: 0.01225, y: 0.01225, z: 0.01225)
          planeNode.addChildNode(newjantNode)
            node.addChildNode(newjantNode)
         }

1 Ответ

0 голосов
/ 13 мая 2019

Вам нужно либо

  • вызов removeFromParentNode () на узле, который вы хотите удалить, или

  • удалить все дочерние узлы содержащего узла, используя:

node.childNodes.forEach {
     $0.removeFromParentNode()
}

Кроме того, всегда полезно использовать SCNReferenceNode при загрузке .scn файлов.

...