Дочерние узлы не видны при вызове setWorldOrigin? - PullRequest
0 голосов
/ 27 ноября 2018

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

По какой-то причине узлы не будут отображаться при запуске приложения.Это работает, когда setWorldOrigin закомментирован.

Я бы хотел, чтобы узлы отображались относительно изображения в качестве источника.

Я что-то упустил?Меняет ли setWorldOrigin сессию?

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

        let nodeGeometry = SCNText(string: "Welcome!", extrusionDepth: 1)
        nodeGeometry.font = UIFont(name: "Helvetica", size: 30)
        nodeGeometry.firstMaterial?.diffuse.contents = UIColor.black

        anchorNode.geometry = nodeGeometry
        anchorNode.scale = SCNVector3(0.1, 0.1, 0.1)
        anchorNode.constraints = [SCNBillboardConstraint()]
        anchorNode.position = SCNVector3(imageAnchor.transform.columns.3.x, imageAnchor.transform.columns.3.y, imageAnchor.transform.columns.3.z)
imageAnchor.transform.columns.3.y, imageAnchor.transform.columns.3.z)

        // Create a plane to visualize the initial position of the detected image.
        let plane = SCNPlane(width: referenceImage.physicalSize.width, height: referenceImage.physicalSize.height)

        let planeNode = SCNNode(geometry: plane)
        planeNode.opacity = 0.25

        /*
         * Plane is rotated to match the picture location
         */
        planeNode.eulerAngles.x = -.pi / 2

        /*
         * Scan runs as an action for a set amount of time
         */
        planeNode.runAction(self.imageHighlightAction)

        // Add the plane visualization to the scene.
        node.addChildNode(planeNode)

        sceneView.session.setWorldOrigin(relativeTransform: imageAnchor.transform)
        sceneView.scene.rootNode.addChildNode(node)

        /*
         * Populates the scene
         */
        handleData()
    } // renderer

1 Ответ

0 голосов
/ 27 ноября 2018

Я понял это.Размер моего изображения был неверным.Я использовал изображение размером 512х512 пикселей.Я получил это, щелкнув правой кнопкой мыши на изображении и выбрав «Получить информацию» и посмотрев на размеры.

У меня также были измерения в метрах.Я изменил его на сантиметры и использовал преобразователь пикселей в сантиметры

...