2016-10-14 6 views
2

У меня есть проблема при импорте файла .obj из URL и преобразовать его в SCNNodeимпорта 3d модель в SceneKit на прошивке

вот код (swift3):

let url = URL.init(string: "https://cloud.box.com/shared/static/ock9d81kakj91dz1x4ea.obj") 
    let asset = MDLAsset(url: url! as URL) 
    let object = asset.object(at: 0) 
    let node = SCNNode(mdlObject: object) 

но когда я запускать проект, консоль показывает, что:

Could not open OBJ file 

Как с этим справиться?

ответ

3

Я думаю, что вы превысили некоторые внутренние ограничения iOS с вашим OBJ-файлом. Отправьте отчет по адресу https://bugreport.apple.com.

Эта слегка измененная версия вашего кода отлично работает на игровой площадке macOS (Xcode 8.0). Но на игровой площадке iOS я вижу то же самое «Не могу открыть OBJ-файл» в консоли.

import SceneKit 
import ModelIO 
import SceneKit.ModelIO 

if let url = URL.init(string: "https://cloud.box.com/shared/static/ock9d81kakj91dz1x4ea.obj") { 
    let asset = MDLAsset(url: url) 
    print(asset) 
    let object = asset.object(at: 0) 
    print(object) 
    let node = SCNNode.init(mdlObject: object) 
    print(node) 
} 

Я смог загрузить и открыть OBJ-файл с помощью Xcode. Затем в редакторе сцены я преобразовал его в формат SCN. Это дало мне файл .SCN, который можно было встроить в проект iOS и открыть с помощью SCNScene (например, знаменитый вращающийся космический корабль). Поэтому, если вы можете жить с вложением статического файла в приложение iOS, это способ получить вашу модель. Но если вам нужны динамически загруженные модели, это не сработает.

+0

Спасибо, ваш ответ действительно вдохновил меня. Я сам создал файл OBJ и достиг –

+0

, но если я хочу избежать этой ошибки, должен ли я использовать OpenGL или что-то еще для импорта OBJ-файла? –

+0

OpenGL ничего не знает о файлах OBJ. Металл тоже. Вы IMO щекочут ошибку или лимит в ModelIO на iOS. Переход на металл или OpenGL не поможет. Нужно ли загружать модель по сети? Если нет, проще всего сделать OBJ для преобразования SCN на вашем Mac и вставить файл SCN вместо использования OBJ. –