Могу ли я использовать 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 в файле их еще нет?

0 ответов

Другие вопросы по тегам