Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何通过SceneKit在.OBJ 3d模型上应用.MTL文件&;模型I/O_Ios_Swift_3d_Scenekit_Modelio - Fatal编程技术网

Ios 如何通过SceneKit在.OBJ 3d模型上应用.MTL文件&;模型I/O

Ios 如何通过SceneKit在.OBJ 3d模型上应用.MTL文件&;模型I/O,ios,swift,3d,scenekit,modelio,Ios,Swift,3d,Scenekit,Modelio,我正在尝试通过SceneKit和model I/0在.obj 3d模型上应用.mtl文件纹理 当我尝试在其上应用.jpg纹理时,下面的代码工作正常: let url = NSBundle.mainBundle().URLForResource("chair", withExtension: "obj") let asset = MDLAsset(URL: NSURL(string:url)!) guard let object

我正在尝试通过SceneKit和model 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扩展用于SetTextReproperties:

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文件中获取纹理数据,我应该声明SCN材质的哪些属性?

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

确保包中有带纹理的.mtl和jpg


我也有同样的问题。你的问题解决了吗?没有,不幸的是没有。我必须提供一个带有.jpg纹理映射的解决方案。你能展示一下你如何使用.jpg文件的代码吗?
let scene = SCNScene(named: "rose.obj")