В модели ввода / вывода документированный 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.

Другие вопросы по тегам