Я пытаюсь применить текстуру .mtl-файла для 3D-модели .obj через SceneKit & Модель I/0.Как применить файл .MTL на .OBJ 3d-модели с помощью SceneKit и Model I/O
Мой код ниже отлично работает, когда я пытаюсь применить .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 и применить его на моей модели, чтобы иметь текстуру на нем? Какие свойства SCNMaterial я должен объявить для получения данных текстуры из файла .mtl?
У меня такой же вопрос. Вы решили свою проблему? – HaoDong
Нет, к сожалению, нет. Я должен был отправить решение только с .jpg картированием текстур. –
Не могли бы вы показать код о том, как вы сделали это с помощью только файлов .jpg? – humbleCoder