2016-12-28 8 views
0

У меня есть «прикрепленный узел», который имеет 2 дочерних узла, которые являются моделями Blender. Я добавил третий узел к этому прикрепляемому узлу, который является SCNCone. По какой-то причине я не могу изменить цвет узла конуса, только прозрачность. Я не вижу ничего плохого в коде, но во время выполнения конус всегда является черным цветом, независимо от того, какой цвет я ему устанавливал.Невозможно изменить цвет SCNCone - Scenekit

let coneGeo = SCNCone(topRadius: 0.1, bottomRadius: 0.7, height: 4) 
let coneMaterial = SCNMaterial() 

coneMaterial.diffuse.contents = UIColor(red: 255.0/255.0, green: 108.0/255.0, blue: 91.0/255.0, alpha: 0.2) 
coneGeo.materials = [coneMaterial] 

let coneNode = SCNNode(geometry: coneGeo) 
coneNode.position = SCNVector3(0, -1.5, 0) 
coneNode.name = "coneNode" 

AttachNode.addChildNode(coneNode) 

ответ

1

Заменить coneMaterial.diffuse.contents = UIColor(red: 255.0/255.0, green: 108.0/255.0, blue: 91.0/255.0, alpha: 0.2) с coneGeo.geometry?.firstMaterial?.diffuse.contents.diffuse.contents = UIColor(red: 255.0/255.0, green: 108.0/255.0, blue: 91.0/255.0, alpha: 0.2). Вместо изменения цвета материала конуса без геометрии вам нужно получить доступ к его материальному цвету через его геометрический параметр.

+0

Спасибо! Выполнение 'coneNode.geometry? .firstMaterial? .diffuse.contents = UIColor (красный: 255.0/255.0, зеленый: 108.0/255.0, синий: 91.0/255.0, alpha: 0.2)' сделал трюк. Еще раз спасибо. – P3rry

0
coneGeo.materials = [coneMaterial] 

Это также будет работать. Я проверил ваш код, добавив узел конуса в пустую сцену. Я просто получаю черный экран.

Но если я изменил значение альфа, чтобы сказать 0.5, это то, что я получаю.

enter image description here

код.

override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     // create a new scene 
     let scene = SCNScene() 

     let coneGeo = SCNCone(topRadius: 0.1, bottomRadius: 0.7, height: 4) 
     let coneMaterial = SCNMaterial() 

     coneMaterial.diffuse.contents = UIColor(red: 255.0/255.0, 
               green: 108.0/255.0, 
               blue: 91.0/255.0, alpha: 0.5) 
     coneGeo.materials = [coneMaterial] 

     let coneNode = SCNNode(geometry 
            : coneGeo) 
     coneNode.position = SCNVector3(0, -1.5, 0) 
     coneNode.name = "coneNode" 

     scene.rootNode.addChildNode(coneNode) 

     // retrieve the SCNView 
     let scnView = self.view as! SCNView 

     // set the scene to the view 
     scnView.scene = scene 

     // allows the user to manipulate the camera 
     scnView.allowsCameraControl = true 

     // show statistics such as fps and timing information 
     scnView.showsStatistics = true 

     // configure the view 
     scnView.backgroundColor = UIColor.black 
    } 

Так что я бы сказал, проверить значение альфа в UIColor(red: 255.0/255.0, green: 108.0/255.0, blue: 91.0/255.0, alpha: 0.2)