无法为导入的.dae几何图形的材质分配颜色

时间:2019-02-26 21:09:57

标签: ios swift scenekit material-swift

我已将.dae文件导入到我的Swift项目中,并且它在我的SceneKit场景中可以正常显示-但由于某些原因,我无法更改颜色。

原始文件(来自Fusion工具)是彩色的,但是无论我做什么,在我的场景中它都保持白色。

我尝试过的事情:

print(geometries[0].firstMaterial?.diffuse.contents)
print("material: \(geometries[0].firstMaterial)")
//self.geometries[1].firstMaterial?.diffuse.contents = UIColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.8)

let newMaterial2 = SCNMaterial()
//newMaterial2.diffuse.contents = UIColor.yellow
newMaterial2.diffuse.contents = UIImage(named: "wifi_d6.png")
self.geometries[0].firstMaterial? = newMaterial2
self.geometries[1].firstMaterial? = newMaterial2

如您所知,.dae文件中有两个几何。 以上工作均无结果,也不会产生错误。

打印输出为:

  

可选(UIExtendedSRGBColorSpace 1 1 1 1)

     

材料:   可选(diffuse =
  specular = SCNMaterialProperty:0x283ff4d00 |   contents = UIExtendedSRGBColorSpace 0 0 0 1>
  排放= SCNMaterialProperty:0x283ff4f80 |   contents = UIExtendedSRGBColorSpace 0 0 0 1>
  transparent = SCNMaterialProperty:0x283ff5000 |   contents = UIExtendedSRGBColorSpace 1 1 1 1>
  反射= SCNMaterialProperty:0x283ff5080 |   contents = UIExtendedSRGBColorSpace 0 0 0 1>
  乘法= SCNMaterialProperty:0x283ff5100 |   contents = UIExtendedSRGBColorSpace 1 1 1 1>
  normal = SCNMaterialProperty:0x283ff5180 |   contents = UIExtendedSRGBColorSpace 1 1 1 1>)

我在这里想念什么? 有关如何进行的任何建议将不胜感激。

编辑: 我仍然非常需要帮助,因此我要添加更多上下文代码,以及基于this answer.

的最新尝试
func createTarget() {
            print("graphics says hello")
            let filePath = Bundle.main.path(forResource: "NIVO node_colors", ofType: "dae", inDirectory: "")
            let referenceURL = URL(fileURLWithPath: filePath!)

            if #available(iOS 9.0, *) {
                // Create reference node
                sensorNode = SCNReferenceNode(url: referenceURL)
                sensorNode?.load()
                sensorNode.position = SCNVector3(0, 0, 0)

                let sceneSource = SCNSceneSource(url: referenceURL, options: nil)
                loadGeometriesFromSceneSource(sceneSource: sceneSource!)

                let yourGeometry = sceneSource!.entryWithIdentifier("Entity12geometry", withClass: SCNGeometry.self)
                let newMaterial = SCNMaterial()
                newMaterial.diffuse.contents = UIColor.blue
                yourGeometry!.replaceMaterial(at: 0, with: newMaterial)
                geometries[0].replaceMaterial(at: 0, with: newMaterial)
                geometries[1].replaceMaterial(at: 0, with: newMaterial)

                print("contents: \(geometries[0].firstMaterial?.diffuse.contents)")

                graphicsScene.rootNode.addChildNode(sensorNode!)
            } else {
                print("iOS 9 not avail")
            }
       }

func loadGeometriesFromSceneSource(sceneSource: SCNSceneSource) {
        let identifiers = sceneSource.identifiersOfEntries(withClass: SCNGeometry.self) as [String]
        for identifier in identifiers {
            print(identifier)
            geometries.append(sceneSource.entryWithIdentifier(identifier, withClass: SCNGeometry.self)!)
        }
    }

打印输出为:

  

内容:可选(UIExtendedSRGBColorSpace 0 0 1 1)

与链接的帖子唯一的区别是该文件不在.scnassets文件夹中。

我没有收到任何错误,但是节点仍然是白色的。

任何人和所有建议都将受到欢迎! 感谢您的宝贵时间。

0 个答案:

没有答案