В модели ввода / вывода документированный API отсутствует в предоставленных библиотеках. Что обходится?
Хотя задокументировано следующее MDLAsset
методы класса не существуют в ModelIO
библиотека:
+ assetWithSCNScene:bufferAllocator:
+ assetWithSCNScene:
Таким образом, в настоящее время нет возможности читать в SceneKit
файл.scn и создайте MDLAsset
,
Что обходится?
ОБНОВЛЕНИЕ 0
Я импортирую это:
import SceneKit
import ModelIO
import MetalKit
import GLKit
В моем рендерере я пытаюсь создать экземпляр MDLAsset
из SCNScene
:
guard let scene = SCNScene(named:"ball.scn") else {
fatalError("Error: Can not create scene")
}
let asset = MDLAsset(scnScene:scene, bufferAllocator:MTKMeshBufferAllocator(device: device))
Я получаю эту ошибку
С указанием категории не может быть найдено. Что я здесь пропустил?
2 ответа
Они определены как категория на MDLAsset
по SceneKit (что необходимо, потому что это где SCNScene
определено). Вам нужно @import SceneKit
так же как @import ModelIO
,
Вы перечислили подписи в ObjC; не заметил, что вы отметили это Swift. В Swift вам нужно импортировать соответствующий подмодуль:
import SceneKit.ModelIO
Это на самом деле немного странно, ИМО, и, вероятно, не должно быть необходимости. Я бы открыл радар (bugreport.apple.com). По крайней мере, документы должны быть более понятными.
Вы смешиваете и сопоставляете три разных фреймворка, поэтому категория не работает.
MTKMeshBufferAllocator является частью MetalKit, и SceneKit не будет знать, что делать с распределением.
Просто не включайте bufferAllocator, и все будет в порядке.
let asset = MDLAsset(scnScene:scene)
По вопросу импорта,
import SceneKit.ModelIO
дает вам мостовые API. Его цель - позволить вам создавать объекты SCN из объектов MDL.