我已将.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文件夹中。
我没有收到任何错误,但是节点仍然是白色的。
任何人和所有建议都将受到欢迎! 感谢您的宝贵时间。