2017-10-01 21 views
1

好了,從我的理解材料,可以爲.dae創建或這裏正在使用的3D模型在Xcode的SCNNode,在模型的編輯:Scenekit:如何獲取節點的所有材料?

enter image description here

最上面的材料就會自動和所有的應用很好。我的問題是,我想以編程方式在我的遊戲中創建的這些材質之間切換。

我試圖做得到這些物質陣列:

node.geometry?.materials 

然而,這僅返回第一材料。我嘗試過一切,但無法找到一種方法來獲取其他材料並切換到它們。現在我正在嘗試:

childNode.geometry?.materials = [(childNode.geometry?.material(named: "test"))!] 
//childNode is the node 

其中測試是第二種材料,但它發現爲零。我如何以編程方式在多種材質之間切換?

回答

1

如果材質沒有實際分配到其中一個材質槽(例如漫反射),它也不是幾何體的一部分。

您可以將第二個材質分配到另一個插槽,然後在將材質讀入以後要使用的屬性中後,將其顏色重置爲代碼。

我自己使用的另一個選項是將多個材質分配給同一模型的不同面(在第三方3D軟件中)。導出爲dae,添加到xcode中,然後自動將幾何圖形分成獨立的元素和各自的材質。然後我可以在xcode中進行調整,並按照您嘗試執行的相同方式進行迭代。

+0

謝謝。你能解釋一下如何做更詳細的第一個選項嗎?你是指另一個插槽是什麼意思? – skyguy

+0

我的意思是在你周圍的工作可以把第二個紋理/顏色,例如排放屬性。然後在代碼中,您可以讀取Emission屬性的.contents屬性,將其保存在自定義屬性中,然後將其分配給Diffuse插槽。請記住,在讀取發射槽後,將發射重置爲黑色。 – Xartec