Отображение «ARAnchor» в ARSCNView - PullRequest
       40

Отображение «ARAnchor» в ARSCNView

0 голосов
/ 05 сентября 2018

В ARKit мы можем визуализировать Feature Points' Cloud, обнаруженный в ARSession через .showFeaturePoints Тип свойства:

self.sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]

Кроме того, мы можем отобразить визуализацию оси координат, указывающую положение и ориентацию AR World Coordinate System:

static let showWorldOrigin: SCNDebugOptions

Но возможно ли показать ARAnchors в ARSCNView?

А если да , как мы можем это сделать?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Просто чтобы прокомментировать комментарии @ sj-r и @ Rickster.

Пример кода, о котором говорил @Rickster в отношении coordinateOrigin.scn, находится здесь: Создание опыта на основе лица

А вот небольшой фрагмент, который я использовал ранее для визуализации оси:

class BMOriginVisualizer: SCNNode {

    //----------------------
    //MARK: - Initialization
    //---------------------

    /// Creates An AxisNode To Vizualize ARAnchors
    ///
    /// - Parameter scale: CGFloat
    init(scale: CGFloat = 1) {

        super.init()

        //1. Create The X Axis
        let xNode = SCNNode()
        let xNodeGeometry = SCNBox(width: 1, height: 0.01, length: 0.01, chamferRadius: 0)
        xNode.geometry = xNodeGeometry
        xNodeGeometry.firstMaterial?.diffuse.contents = UIColor.red
        xNode.position = SCNVector3(0.5, 0, 0)
        self.addChildNode(xNode)

        //2. Create The Y Axis
        let yNode = SCNNode()
        let yNodeGeometry = SCNBox(width: 0.01, height: 1, length: 0.01, chamferRadius: 0)
        yNode.geometry = yNodeGeometry
        yNode.position = SCNVector3(0, 0.5, 0)
        yNodeGeometry.firstMaterial?.diffuse.contents = UIColor.green
        self.addChildNode(yNode)

        //3. Create The Z Axis
        let zNode = SCNNode()
        let zNodeGeometry = SCNBox(width: 0.01, height: 0.01, length: 1, chamferRadius: 0)
        zNode.geometry = zNodeGeometry
        zNodeGeometry.firstMaterial?.diffuse.contents = UIColor.blue
        zNode.position = SCNVector3(0, 0, 0.5)
        self.addChildNode(zNode)

        //4. Scale Our Axis
        self.scale = SCNVector3(scale, scale, scale)

    }


    required init?(coder aDecoder: NSCoder) { fatalError("Vizualizer Coder Not Implemented") }
}

Что можно инициализировать так:

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

        let anchorVizualizer = BMOriginVisualizer(scale: 0.5)
        node.addChildNode(anchorVizualizer)

}

Надеюсь, это поможет вам расширить ответ на вопрос @ sj-r.

0 голосов
/ 05 сентября 2018

ARAnchor представляет только «положение и ориентация». Вещи, которые вы видите: SCNNode s.

Вы можете прикрепить узел для каждого добавленного якоря с помощью метода в ARSCNViewDelegate

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    //create a node so you can visualize the location.
    let sphereNode = SCNNode(geometry: SCNSphere(radius: 0.5))
    sphereNode.geometry?.firstMaterial?.diffuse.contents = UIColor.blue
    return sphereNode
}

Это вызывается после добавления привязки (или когда система добавляет привязки, например, когда у вас включено обнаружение плоскости или обнаружение изображения / объекта)

sceneView.session.add(anchor:)
...