Swift 4 Загрузить 3D-модели из Firebase - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить 3D-модель, которая хранится в Firebase, в моем приложении iOS.

Сейчас я сохранил объект по умолчанию (ship.scn) в моем хранилище Firebase.

Как я могу преобразовать Данные, полученные из Firebase, в SCNNode?

Это мой код прямо сейчас:

 let storage = Storage.storage().reference()
    let modelPath = storage.child("models/ship.scn")
    print("ModelPath: \(modelPath)")
    modelPath.getMetadata { (metaData, error) in
        if error != nil {
            print("ERROR: ", error!)
        }else{
            print("Metadata: \(metaData!)")
        }
    }

    // this is what firebase shows for images
    // how can i get the Data as SCNNode?
    modelPath.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
        if error != nil {
            print("Error getData: \(error!)")
        }else {
            print(data)
        }
    }

1 Ответ

0 голосов
/ 07 декабря 2018

Я решил эту проблему, загрузив 3D-объект из firebase в папку документов устройства.Поэтому, когда мне нужен 3D-объект, я создаю ссылку на загруженный 3D-объект

запись в каталог: (где modelPath - это storage.child ('ваш путь') в базе данных firebase)

   let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
   let tempDirectory = URL.init(fileURLWithPath: paths, isDirectory: true)
   let targetUrl = tempDirectory.appendingPathComponent("ship.scn")
   modelPath.write(toFile: targetUrl) { (url, error) in
                if error != nil {
                    print("ERROR: \(error!)")
                }else{
                    print("modelPath.write OKAY")
                }
           }

загрузить 3D-файл из каталога:

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let tempDirectory = URL.init(fileURLWithPath: paths, isDirectory: true)
    let targetUrl = tempDirectory.appendingPathComponent("\ship.scn")
    var sceneForNode: SCNScene? = nil
    do {
        // load the 3D-Model node from directory path
        sceneForNode = try SCNScene(url: targetUrl, options: nil)
    }catch{
        print(error)
    }
    // create node to display on scene
    let node: SCNNode? = sceneForNode?.rootNode.childNode(withName: "ship", recursively: true)
...