Comment L'Appliquer.MTL File on.Modèle OBJ 3d via SceneKit & Model I / O
j'essaie d'appliquer un .la texture du fichier mtl est activée .obj modèle 3d via SceneKit Et le Modèle I/0.
mon code ci-dessous fonctionne très bien quand j'essaie de postuler .jpg d'une texture sur:
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)
j'utilise L'extension MDMaterial suivante pour 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)
}
}
}
Comment dois-je charger un .fichier mtl et de l'appliquer sur mon modèle, texture? Quelles propriétés de SCNMaterial devrais-je déclarer pour obtenir des données de texture à partir d'un .fichier mtl?
1 réponses
Il serait peut-être un peu tard, mais je suis confrontée au même problème et la façon dont je pourrais charger le .mtl information était de créer l'objet et de la scène, par exemple, je suis de chargement ce modèle
let scene = SCNScene(named: "rose.obj")
assurez-vous d'avoir le .mtl et le jpg avec les textures dans votre paquet.