在模型I / O中,提供的库中缺少文档化的API。有什么工作?

时间:2016-11-04 13:32:04

标签: swift scenekit modelio

虽然记录了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))

我收到此错误

enter image description here

无法找到该类别。我在这里错过了什么?

2 个答案:

答案 0 :(得分:1)

这些被SceneKit定义为MDLAsset上的类别(这是必要的,因为它定义了SCNScene)。您需要@import SceneKit以及@import ModelIO

您在ObjC中列出了签名;没有注意到你标记了Swift。在Swift中,您需要导入相关的子模块:

import SceneKit.ModelIO

这实际上有点奇怪的IMO,可能不是必要的。我打开雷达(bugreport.apple.com)。至少,文档需要更清晰。

答案 1 :(得分:1)

您正在混合和匹配三个不同的框架,这就是该类别无法运作的原因。

MTKMeshBufferAllocator是MetalKit的一部分,SceneKit不知道如何处理分配。

请离开bufferAllocator,你应该没问题。

let asset = MDLAsset(scnScene:scene)

关于导入问题,

import SceneKit.ModelIO

为您提供桥接API。它的目的是允许您从MDL对象构造SCN对象。