以编程方式更改scn对象的材质

时间:2017-10-12 18:17:02

标签: swift xcode scenekit

在我的场景编辑器中,我有一个黄色纹理的立方体,名称为立方体。

如何在代码中更改多维数据集的材质?

基本上我应该这样:

let scene = SCNScene(named: "art.scnassets/cubeScene.scn")!

var cube = scene.rootNode.childNodes(named:"cube")

cube.diffuse.contents = UIImage(named: "grid.png")

但这不起作用。什么是正确的方式?

1 个答案:

答案 0 :(得分:3)

您问题中的代码无法编译有三个原因:

  1. childNode(named:)应为childNode(withName:recursively:)。有重命名的参数和缺少的参数。

  2. childNode(withName:recursively:)返回的值是可选节点(SCNNode?) - 因为可能没有具有该名称的节点。

    < / LI>
  3. SCNNode没有diffuse属性。节点可能具有geometry,而几何可能具有firstMaterialSCNMaterial具有漫反射属性。

  4. 根据您的需要,最后一行可能如下所示:

    cube?.geometry?.firstMaterial?.diffuse.contents = /* ... */
    

    注意所有问号:

    • cube后面有一个问号,因为可能不存在具有该名称的节点。
    • geometry后面有一个问号,因为并非每个节点都有几何图形。有些节点有灯或摄像头。一些节点只是节点层次结构的一部分。
    • firstMaterial后面有一个问号,因为不是每个几何都有材质。此外,某些几何元素具有多个materials