为什么MTKMesh(mesh:device :)总是无法创建MTKMesh?

时间:2016-11-12 13:52:23

标签: swift scenekit metal modelio

在iOS应用中,我正在尝试加载一个SceneKit .scn个文件,其中包含一个四元组,并从中生成MTKMesh。没有快乐。

我加载SCNScene文件:

guard let scene = SCNScene(named:"scenes.scnassets/quad.scn") else {
    fatalError("Error: Can not create SCNScene with \(sceneName)")
}

我遍历场景图以找到四边形:

guard let sceneNode = scene.rootNode.childNode(withName:"quadIdentity", recursively:true) else {
    fatalError("Error: Can not create sceneNode")
}

我提取四边形几何:

guard let sceneGeometry = sceneNode.geometry else {
    fatalError("Error: Can not create sceneGeometry")
}

我从几何体中创建一个Model I/O网格物体:

let modelIOMesh = MDLMesh(scnGeometry:sceneGeometry, bufferAllocator:MTKMeshBufferAllocator(device:device))

我强制顶点描述为Metal格式:

let metalVertexDescriptor = MTLVertexDescriptor.xyz_n_st_vertexDescriptor()

let modelIOVertexDescriptor = MTKModelIOVertexDescriptorFromMetal(metalVertexDescriptor)
(modelIOVertexDescriptor.attributes[ 0 ] as! MDLVertexAttribute).name = MDLVertexAttributePosition
(modelIOVertexDescriptor.attributes[ 1 ] as! MDLVertexAttribute).name = MDLVertexAttributeNormal
(modelIOVertexDescriptor.attributes[ 2 ] as! MDLVertexAttribute).name = MDLVertexAttributeTextureCoordinate

modelIOMesh.vertexDescriptor = modelIOVertexDescriptor

fatal error

总是失败
do {
    mesh = try MTKMesh(mesh:modelIOMesh, device:device)
} catch {
    fatalError("Error: Can not create Metal mesh")
}

我错过了什么?

更新0

我更改了try / catch以打印错误:

do {

    mesh = try MTKMesh(mesh:modelIOMesh, device:device)

} catch let error as NSError {

    print(error.localizedDescription)

}

错误是:

  

致命错误:在解包可选值时意外发现nil

0 个答案:

没有答案