Могу ли я использовать SKScene для материала в файле Obj, загруженном в SceneKit?
Моя цель - иметь возможность коснуться конкретной модели и раскрасить поверхность. Мне удалось сделать это с помощью универсальных SCNSphere, SCNBox и т. Д.
Я настроил его так, и он в основном работает для SCNSphere и т. Д.:
let node = SCNNode(geometry: geometry)
let material = SCNMaterial()
material.specular.contents = SKColor.init(white: 0.1, alpha: 1)
material.shininess = 2.0;
material.normal.contents = "wood-normal.png"
let skScene = SKScene.init(size: CGSize(width: SPRITE_SIZE, height: SPRITE_SIZE))
skScene.backgroundColor = SKColor.orange
skScene.scaleMode = .aspectFill
material.diffuse.contents = skScene
geometry.firstMaterial = material
scnScene.rootNode.addChildNode(node)
Однако когда я загружаю
.obj
файл и попытаться установить материал с помощью SKScene, я ничего не получаю. Вот как я настроил
obj
let bundle = Bundle.main
let path = bundle.path(forResource: name, ofType: "obj")
let url = NSURL(fileURLWithPath: path!)
let asset = MDLAsset(url: url as URL)
guard let object = asset.object(at: 0) as? MDLMesh else {
print("Failed to get mesh from obj asset")
return
}
let material = SCNMaterial()
material.specular.contents = SKColor.init(white: 0.1, alpha: 1)
let skScene = SKScene.init(size: CGSize(width: SPRITE_SIZE, height: SPRITE_SIZE))
skScene.backgroundColor = SKColor.orange
skScene.scaleMode = .aspectFill
material.diffuse.contents = skScene
let geometry = SCNGeometry.init(mdlMesh: object)
let node = SCNNode(geometry: geometry)
node.geometry?.materials = [material]
scnScene.rootNode.addChildNode(node)
Но как видите цвет чайника не оранжевый
Мой вопрос в том, что я делаю что-то не так с точки зрения использования SKScene в качестве материала для
obj
файл, или есть какие-то ограничения, о которых я знаю? Я потратил на это несколько часов и открыт для предложений, если у кого-то есть идеи.
Кроме того, в подобной ситуации, как мне решить, каков размер SKScene, если я хочу произвольно обернуть всю сетку SKScene?
Обновление 1 Я вроде как разобрался. Мой
obj
файл не имеет координат текстуры, только вершины. Когда я попробовал другой
obj
файл с координатами текстуры, затем
skScene
вроде загрузился правильно. Думаю, у моего чайника нет уф-координат, поэтому он не может отображать текстуру. Есть ли способ добавить УФ-координаты, если
obj
в файле их еще нет?