2017-03-29 6 views
0

In SceneKit baue ich einen Knoten aus Linien, um die XYZ-Achsen in der Mitte der Szene wie in Cinema4D zu zeichnen.SceneKit vermeiden Beleuchtung auf bestimmten Knoten

cinema4D

würde ich diese 3 Knoten nicht wie auf die globale Beleuchtung zu beteiligen und auch sichtbar sein, wenn das Licht dunkel/inexistent/zu stark ist. Im Bild unten sieht man, dass die Z-Achse zu stark aufhellt und nicht sichtbar ist.

my software

Gibt es eine Möglichkeit, einen Knoten zu der Szene Beleuchtung, wie mit der Kategorie Masken für Physik teilnehmen zu stoppen?

In diesem Fall, wie würde der Knoten aufhellen, damit er trotzdem angezeigt wird?

Antwort

4

SCNLight hat eine categoryBitMask Eigenschaft. Dadurch können Sie auswählen, welche Knoten vom Licht betroffen sind (obwohl dies bei Umgebungslichtern ignoriert wird). Sie könnten zwei Lichtquellenkategorien haben, eine für Ihre Hauptszene und eine andere, die nur Ihre Linien betrifft.

Hier ist ein einfaches Beispiel mit zwei Knoten ist, jede beleuchtet mit einer anderen Farbe Licht:

struct LightType { 
    static let light1:Int = 0x1 << 1 
    static let light2:Int = 0x1 << 2 
} 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let scene = SCNScene(named: "art.scnassets/scene.scn")! 

     let lightNode1 = SCNNode() 
     lightNode1.light = SCNLight() 
     lightNode1.light!.type = .omni 
     lightNode1.light!.color = UIColor.yellow 
     lightNode1.position = SCNVector3(x: 0, y: 10, z: 10) 
     lightNode1.light!.categoryBitMask = LightType.light1 
     scene.rootNode.addChildNode(lightNode1) 

     let lightNode2 = SCNNode() 
     lightNode2.light = SCNLight() 
     lightNode2.light!.type = .omni 
     lightNode2.light!.color = UIColor.red 
     lightNode2.position = SCNVector3(x: 0, y: 10, z: 10) 
     lightNode2.light!.categoryBitMask = LightType.light2 
     scene.rootNode.addChildNode(lightNode2) 

     let sphere1 = scene.rootNode.childNode(withName: "sphere1", recursively: true)! 
     sphere1.categoryBitMask = LightType.light1 
     let sphere2 = scene.rootNode.childNode(withName: "sphere2", recursively: true)! 
     sphere2.categoryBitMask = LightType.light2 

     let scnView = self.view as! SCNView 
     scnView.scene = scene 
    } 
} 

enter image description here

+0

Danke, ich werde jetzt in es graben! Würdest du ein Stück Code haben? :-) –

+0

@ BenoîtLahoz Ich habe ein kurzes Beispiel hinzugefügt. –

+0

Vielen Dank! Genau das habe ich gesucht! –