Scenekit:如何获取节点的所有材质?
Posted
技术标签:
【中文标题】Scenekit:如何获取节点的所有材质?【英文标题】:Scenekit: How to get all of node's materials? 【发布时间】:2018-03-12 11:55:28 【问题描述】:好的,据我了解,可以在模型编辑器中为 .dae 或在 Xcode 中用作 SCNNode 的任何 3D 模型创建材料:
最上面的材料会自动应用,一切都很好。我的问题是我想以编程方式在整个游戏中创建的这些材料之间切换。
我试图通过以下方式获取这些材料的数组:
node.geometry?.materials
但是这只会返回第一个材料。我已经尝试了everybting,但无法找到获取其他材料并切换到它们的方法。现在我正在尝试:
childNode.geometry?.materials = [(childNode.geometry?.material(named: "test"))!]
//childNode is the node
其中 test 是第二种材料,但它发现它为零。如何以编程方式在多种材质之间切换?
【问题讨论】:
【参考方案1】:如果材质实际上没有分配到材质槽之一(例如漫反射),它也不是几何体的一部分。
您可以将第二个材质分配给另一个插槽,然后在将材质读入属性后在代码中重置其颜色以供以后使用。
我自己使用的另一个选项是将多种材料分配给同一模型的不同面(在第三方 3d 软件中)。导出为 dae,添加到 xcode,然后自动将几何体划分为单独的元素,每个元素都有自己的材质。然后我可以在 xcode 中进行调整,并以与您尝试相同的方式进行迭代。
【讨论】:
谢谢。您能否更详细地解释如何执行第一个选项?另一个插槽是什么意思? 我的意思是作为一种解决方法,您可以将第二个纹理/颜色放入例如 Emission 属性中。然后在代码中,您可以读取 Emission 属性的 .contents 属性,将其保存在自定义属性中,然后将其分配给 Diffuse 插槽。请记住在阅读 Emission 插槽后将 Emission 重置回黑色。以上是关于Scenekit:如何获取节点的所有材质?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SceneKit 从 COLLADA (.dae) 文件中获取几何图形