Как разместить 3D модель типа OBJ с помощью ARKit?

Мне нужна помощь с размещением 3D-модели с помощью нового Apple ARKit. Можно ли разместить объект типа OBJ? Пытаюсь разместить 3д модель черепа.

//Load the OBJ file
let bundle = Bundle.main
guard let url = bundle.url(forResource: "Cranial", withExtension: "obj") else {
    fatalError("Failed to find model file")
}

let asset = MDLAsset(url:url)
guard let object = asset.object(at: 0) as? MDLMesh else {
    fatalError("Failed to get mesh from asset")
}

let scene = SCNScene()
let nodeCranial = SCNNode.init(mdlObject: object)
nodeCranial.simdPosition = float3(0, 0, 0.5)
sceneView.scene.rootNode.addChildNode(nodeCranial)

Не знаю, почему перед камерой ничего не видно. Это сработает, если я использую следующую строку вместо nodeCranial сверху:

let cubeNode = SCNNode(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0))

Почему это не работает и с OBJ файлом? Приведенный выше код находится в функции viewDidLoad().


person CoderOfTheForce    schedule 17.07.2017    source источник
comment
Насколько велика твоя голова? 3D-ресурсы часто создаются в произвольном масштабе, но в ARKit одна единица пространства сцены отображается в один реальный метр. Если ваша сетка OBJ, скажем, имеет ширину в несколько десятков единиц, она может выглядеть не так, как вы хотите в AR. Вы можете проверить его размер с помощью свойства boundingBox во время выполнения или загрузив файл OBJ в редактор сцены в Xcode.   -  person rickster    schedule 17.07.2017


Ответы (1)


    let tempScene = SCNScene(named: "art.scnassets/cat/cat.obj")!
    modelNode = tempScene.rootNode
    modelNode.simdPosition = float3(0, 0, 0.5)
    sceneView.scene.rootNode.addChildNode(modelNode)

таким образом вы можете загружать файлы .obj, .scn или .dae.

person Mayuri R Talaviya    schedule 05.05.2018
comment
.scn работает нормально, но добавление objc или другого не работает. app ничего не показывает и не выдает никаких ошибок. - person Jamil; 12.07.2020