Я пытаюсь загрузить загруженные 3d объекты из каталога документов.Я успешно загрузил 3D-файл объекта и файл .mtl в scenekit, но изображения, которые названы внутри файла .mtl, не отображаются для применения текстуры на 3d-модели, которые также помещаются в каталог документов с тем же именем, что и в файле .mtl.
ниже указан код
func loadObjToScene() {
let scene = SCNScene()
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
cameraNode.position = SCNVector3.init(0, 0, 15)
// create and add a light to the scene
let lightNode = SCNNode()
lightNode.light = SCNLight()
lightNode.light?.type = .omni
lightNode.position = SCNVector3.init(0, 0, 10)
scene.rootNode.addChildNode(lightNode)
// create and add an ambient light to the scene
let ambientLightNode = SCNNode()
ambientLightNode.light = SCNLight()
ambientLightNode.light?.type = .ambient
ambientLightNode.light?.color = UIColor.darkGray
scene.rootNode.addChildNode(ambientLightNode)
scnView.scene = scene
scnView.allowsCameraControl = true
scnView.showsStatistics = false
scnView.backgroundColor = UIColor.white
let mdlAsset = MDLAsset(url: URL(fileURLWithPath: "\(MZUtility.baseFilePath)/\(/obj?.objectUrl?.fileName)"))
let scatteringFunction = MDLScatteringFunction.init()
let material = MDLMaterial.init(name: "baseMaterial", scatteringFunction: scatteringFunction)
let textureFileName = "Ford_Explorer_(Mk5f)_(U502)_Police_Interceptor_Utility_HQinterior_2016.mtl"
material.setTextureProperties(textures: [MDLMaterialSemantic.baseColor : textureFileName])
for mesh in ((mdlAsset.object(at: 0) as? MDLMesh)?.submeshes as? [MDLSubmesh]) ?? [] {
print("Mesh Name: \(mesh.name)")
mesh.material = material
}
mdlAsset.loadTextures()
let objectNode = SCNNode(mdlObject: mdlAsset.object(at: 0))
objectNode.scale = SCNVector3(2, 2, 2)
objectNode.position = SCNVector3(0, 0, 0)
scene.rootNode.addChildNode(objectNode)
}
}
extension MDLMaterial {
func setTextureProperties(textures: [MDLMaterialSemantic:String]) -> Void {
for (key,value) in textures {
let url = URL(fileURLWithPath: "\(MZUtility.baseFilePath)/\(value)")
let property = MDLMaterialProperty(name:value, semantic: key, url: url)
self.setProperty(property)
}
}
}