9
SceneKit & 모델 I/0을 통해 .obj 3D 모델에 .mtl 파일 텍스처를 적용하려고합니다.SceneKit 및 모델 I/O를 통해 .OBJ 3D 모델의 .MTL 파일을 적용하는 방법
나는 그것에 텍스처의 .JPG를 적용하려고하면 내 아래 코드는 잘 작동 : 나는로드해야합니다 어떻게
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)
}
}
}
: I setTextureProperties에 대해 다음 MDMaterial 확장자를 사용하고
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)
을 .mtl 파일을 만들고 내 모델에 텍스처를 적용 해 보겠습니다. .mtl 파일에서 텍스처 데이터를 가져 오기 위해 SCNMaterial의 속성을 선언해야합니까?
그것은 조금 늦게 될 수도 있지만 나는이 같은 문제와 나는 .mtl 정보를로드 할 수있는 방향을 향하고있어
나는 동일한 질문을 가지고있다. 문제를 해결 했습니까? – HaoDong
아니요, 불행히도 아닙니다. .jpg 텍스처 매핑만으로 솔루션을 제공해야했습니다. –
.jpg 파일 만 사용하여 코드를 표시 할 수 있습니까? – humbleCoder