虽然记录了MDLAsset
库中不存在以下ModelIO
类方法:
+ assetWithSCNScene:bufferAllocator:
+ assetWithSCNScene:
因此,目前无法读取SceneKit
.scn 文件并创建MDLAsset
。
有什么工作?
我正在导入这些:
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))
我收到此错误
无法找到该类别。我在这里错过了什么?
答案 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对象。