簡體   English   中英

SCNNode:每個單個節點的顏色都是隨機的,不是全部? -Swift,SceneKit

[英]SCNNode: Random color for each individial node, not all? - Swift, SceneKit

如果我有一個函數,只要用戶點擊屏幕並同時更改多維數據集的顏色,它就會在前一個多維數據集的旁邊立即生成一個多維數據集,那么我如何確保每個多維數據集都可以變成隨機顏色而不是所有多維數據集變成相同的隨機顏色? 我認為我不能對每個多維數據集使用相同的幾何圖形,因為這樣它將繼承我最初給它的任何材質。 我希望生成的每個多維數據集都選擇自己的隨機顏色,而不是所有的立方體都選擇它在點擊時選擇的相同隨機顏色。 我有一個隨機的顏色功能,並且可以正常工作。 但是,如果我生成5個多維數據集,然后點擊屏幕,則所有5個多維數據集都會變成相同的隨機顏色。 但是,我希望每個單獨的多維數據集都是其自己的隨機顏色。 我正在使用Swift和SceneKit。 感謝您的幫助。

  func randomColor2() -> UIColor{
    let red = CGFloat(drand48())
    let green = CGFloat(drand48())
    let blue = CGFloat(drand48())
    return UIColor(red: red, green: green, blue: blue, alpha: 1.0)
}

現在我只是說,我的內心開始了:

boxNodeMaterial.diffuse.contents = randomColor2

我還調用了createBox函數,該函數在原始框旁邊添加了另一個框節點。 我希望第二個盒子選擇自己的隨機顏色,而不是原來的顏色。 我希望對添加的每個框繼續執行此操作。 框1可以是紅色,綠色或藍色。 方框2可以是紅色,綠色或藍色,方框3依此類推。 NOT框1,框2,框3例如選擇紅色,並使它們都具有相同的顏色。

您似乎創建了多個SCNGeometry ,但是它們全部共享相同的材質。 這會導致出現您要描述的問題:更改一種材料的顏色會更改所有框的顏色。

為避免這種情況,只需在每次創建新盒子時創建一個新的SCNMaterial

//Create a new, unique material for each box
let material = SCNMaterial()
material.diffuse.contents = randomColor2()

//Copy the box (or create a new one)
let newBox = oldBox.copy()
newBox.firstMaterial = material

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM