Как разместить 3D-объект в GPS-координатах с помощью ARkit - PullRequest
0 голосов
/ 10 июля 2019

Работая с Project Dent, пытаемся поместить трехмерный объект в абсолютные координаты GPS.

В файле Readme показано, как поместить объект 2D-аннотации информации в пространство AR, но я не могу заставить его разместить 3D-объект с координатами GPS

В Project Dent не используется стандартный SceneView, которыйзатрудняет попытки сделать это, основываясь на большом количестве уроков.Он использует SceneLocationView на основе ARCL

Вот пример кода для 2D-аннотации

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let view = UIView() // or a custom UIView subclass

let annotationNode = LocationAnnotationNode(location: location, view: view)

sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: annotationNode)

Вот что я пытался сделать, чтобы заставить его работать с 3D-объектом

let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
let location = CLLocation(coordinate: coordinate, altitude: 300)
let box = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0)

let objectNode = LocationNode(location: location, SCNbox: box)

sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: objectNode)

В идеале, я бы хотел, чтобы этот код просто поместил 3D-прямоугольник с этими GPS-координатами в пространстве AR.

К сожалению, я не могу даже заставить его строить в настоящее время.

В качестве обновления к этому я сделал следующее.Создайте новый класс в узлах на основе LocationNode с именем ThreeDNode -

open class ThreeDNode: LocationNode {

   // Class for placing 3d objects in AR space
   public let threeDObjectNode: LocationNode

   public init(location: CLLocation?, scene: SCNScene) {

       let boxGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
       //let boxNode = SCNNode(geometry: boxGeometry)

       threeDObjectNode = LocationNode(location: location)
       threeDObjectNode.geometry = boxGeometry
       threeDObjectNode.removeFlicker()

       super.init(location: location)

       addChildNode(threeDObjectNode)
   }

   required public init?(coder aDecoder: NSCoder) {
       fatalError("init(coder:) has not been implemented")
   }

, а затем в POIViewController попытался поместить трехмерный объект в пространство AR со следующим кодом -

//example using 3d box object
        let coordinate2 = CLLocationCoordinate2D(latitude: 52.010339, longitude: -8.351157)
        let location2 = CLLocation(coordinate: coordinate2, altitude: 300)

        let asset = SCNScene(named: "art.scnassets/ship.scn")!

        let object = ThreeDNode(location: location2, scene: asset)

        //add to scene with confirmed location
        sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: object)

Нетрадость :( Любая помощь, высоко ценится.

...