【问题标题】:Scenekit: How to get all of node's materials?Scenekit:如何获取节点的所有材质?
【发布时间】: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 是第二种材料,但它发现它为零。如何以编程方式在多种材质之间切换?

【问题讨论】:

    标签: swift3 3d scenekit scnnode scnmaterial


    【解决方案1】:

    如果材质实际上没有分配到材质槽之一(例如漫反射),它也不是几何体的一部分。

    您可以将第二个材质分配给另一个插槽,然后在将材质读入属性后在代码中重置其颜色以供以后使用。

    我自己使用的另一个选项是将多种材料分配给同一模型的不同面(在第三方 3d 软件中)。导出为 dae,添加到 xcode,然后自动将几何体划分为单独的元素,每个元素都有自己的材质。然后我可以在 xcode 中进行调整,并以与您尝试相同的方式进行迭代。

    【讨论】:

    • 谢谢。您能否更详细地解释如何执行第一个选项?另一个插槽是什么意思?
    • 我的意思是作为一种解决方法,您可以将第二个纹理/颜色放入例如 Emission 属性中。然后在代码中,您可以读取 Emission 属性的 .contents 属性,将其保存在自定义属性中,然后将其分配给 Diffuse 插槽。请记住在阅读 Emission 插槽后将 Emission 重置回黑色。
    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2016-12-14
    • 2018-07-06
    • 1970-01-01
    • 2018-10-12
    • 2021-05-16
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多