如何通过SceneKit和模型I / O在.OBJ 3D模型上应用.MTL文件

我试图通过SceneKit和模型I / 0在.obj 3d模型上应用.mtl文件纹理。

当我尝试在其上应用纹理的.jpg时,下面的代码正常工作:

let url = NSBundle.mainBundle().URLForResource("chair", withExtension: "obj") let asset = MDLAsset(URL: NSURL(string:url)!) guard let object = asset.objectAtIndex(0) as? MDLMesh else { //fatalError("Failed to get mesh from asset.") return } if shouldApplyTexture == true { var textureFileName = "chair.mtl" // Create a material from the various textures let scatteringFunction = MDLScatteringFunction() let material = MDLMaterial(name: "baseMaterial", scatteringFunction: scatteringFunction) material.setTextureProperties(textures: [ .BaseColor:textureFileName]) // Apply the texture to every submesh of the asset for submesh in object.submeshes! { if let submesh = submesh as? MDLSubmesh { submesh.material = material } } } // Wrap the ModelIO object in a SceneKit object let node = SCNNode(MDLObject: object) if (scene.rootNode.childNodes.count > 0){ scene.rootNode.enumerateChildNodesUsingBlock { (node, stop) -> Void in node.removeFromParentNode() } } scene.rootNode.addChildNode(node) 

我正在使用以下MDMaterial扩展setTextureProperties:

 extension MDLMaterial { func setTextureProperties([MDLMaterialSemantic:String]) -> Void { for (key,value) in textures { var finalURL = NSBundle.mainBundle().URLForResource(value, withExtension: "") guard let url = finalURL else { // fatalError("Failed to find URL for resource \(value).") return } let property = MDLMaterialProperty(name:fileName!, semantic: key, URL: url) self.setProperty(property) } } } 

我应该如何加载一个.mtl文件并将其应用到我的模型上以获得纹理? 我应该声明从.mtl文件获取纹理数据的SCNMaterial属性是什么?

这可能有点晚,但我面临同样的问题,我可以加载.mtl信息的方式是通过和场景来创build对象,例如,我正在加载这个模型

 let scene = SCNScene(named: "rose.obj")