Как нарисовать линию в arkit на основе CLLocation в iOS Swift? - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь использовать ARKit для наружной навигации.Я использовал mapbox для AR-навигации и использовал mapboxarkit и mapboxDirection cocoapods.

Узлы показаны как пути.Я могу показать пути в виде пунктирных шперов или плоскостей, но не могу показать их в виде линий.Вот мои выходные скриншоты

Это узел, который я попытался показать как разрыв строки и попытался настроить scnbox так, чтобы он был прямым, и показать как линию: imagescnbox to be straight and show as a line">.

Это ожидаемый результат:

I want an AR line like this.

Вот код, который я пробовал до сих пор - Вот код для добавления аннотации AR и строки AR.

if let route = routes?.first, let leg = route.legs.first {
    var polyline = [CLLocationCoordinate2D]()

    // Add an AR node and map view annotation for every defined "step" in the route
    for step in leg.steps {
        let coordinate = step.coordinates!.first!
        polyline.append(coordinate)
        let stepLocation = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)

        // Update feature collection for map view
        self.updateShapeCollectionFeature(&self.waypointShapeCollectionFeature, with: stepLocation, typeKey: "waypoint-type", typeAttribute: "big")

        // Add an AR node
        let annotation = Annotation(location: stepLocation, calloutImage: self.calloutImage(for: step.description))
        annotationsToAdd.append(annotation)
    }

    let metersPerNode: CLLocationDistance = 1
    let turfPolyline = Polyline(polyline)

    // Walk the route line and add a small AR node and map view annotation every metersPerNode
    for i in stride(from: metersPerNode, to: turfPolyline.distance() - metersPerNode, by: metersPerNode) {            
        // Use Turf to find the coordinate of each incremented distance along the polyline
        if let nextCoordinate = turfPolyline.coordinateFromStart(distance: i) {
            let interpolatedStepLocation = CLLocation(latitude: nextCoordinate.latitude, longitude: nextCoordinate.longitude)

            // Update feature collection for map view
            self.updateShapeCollectionFeature(&self.waypointShapeCollectionFeature, with: interpolatedStepLocation, typeKey: "waypoint-type", typeAttribute: "small")

            // Add an AR node
            let annotation = Annotation(location: interpolatedStepLocation, calloutImage: nil)
            annotationsToAdd.append(annotation)
        }
    }
}

Вот код для создания scnplane:

func createLightBulbNode() -> SCNNode {
    let lightBulbNode = collada2SCNNode(filepath: "art.scnassets/cubeSolid.dae")

    lightBulbNode.position = SCNVector3(0, -0.5, 0)

    return lightBulbNode
}

func collada2SCNNode(filepath:String) -> SCNNode {
    let node = SCNNode()
    let scene = SCNScene(named: filepath, inDirectory: nil, options: [SCNSceneSource.LoadingOption.animationImportPolicy: SCNSceneSource.AnimationImportPolicy.doNotPlay])
    let nodeArray = scene!.rootNode.childNodes
    for childNode in nodeArray {
        node.addChildNode(childNode as SCNNode)
    }
    return node
}

func node(for annotation: Annotation) -> SCNNode? {    
    if annotation.calloutImage == nil {
        // Comment `createLightBulbNode` and add `return nil` to use the default node
        return createLightBulbNode()
    } else {
        let firstColor = UIColor(red: 0.0, green: 99/255.0, blue: 175/255.0, alpha: 1.0)
        return createSphereNode(with: 0.5, firstColor: firstColor, secondColor: UIColor.green)
    }
}
...