2015-04-21 1 views
5

J'essaie de créer un spot qui éclaire un cube. La surface en dessous devrait alors montrer une ombre. Malheureusement, je n'étais pas capable d'y parvenir. La lumière ignore le cube et jette la lumière sur les deux - la surface et le cube - indépendamment du fait que le cube est dans le chemin.SceneKit - Eclairage et coulée d'ombres

Comment ça ressemble:

enter image description here

Le code, je viens de définir castsShadow YES sur chaque nœud pour le test, mais rien à ce jour aidé:

BOOL shadows = YES; 

_baseNode.castsShadow = shadows; 
_scene.rootNode.castsShadow = shadows; 

SCNBox *box = [SCNBox boxWithWidth: 50 height: 50 length: 50 chamferRadius: 10]; 
box.firstMaterial.diffuse.contents = [UIColor colorWithRed: 0.0 green:0.0 blue: 0.8 alpha: 1.0]; 
box.firstMaterial.doubleSided = YES; 
SCNNode *boxNode = [SCNNode nodeWithGeometry: box]; 

boxNode.position = SCNVector3Make(100, 100, 100); 
boxNode.castsShadow = shadows; 
[_baseNode addChildNode: boxNode]; 

SCNBox *plane = [SCNBox boxWithWidth: 1000 height:1000 length: 40 chamferRadius: 10]; 
plane.firstMaterial.diffuse.contents = [UIColor colorWithWhite: 0.2 alpha: 1.0]; 
SCNNode *planeNode = [SCNNode nodeWithGeometry: plane]; 
planeNode.position = SCNVector3Make(100, 100, 0); 
planeNode.castsShadow = shadows; 
[_baseNode addChildNode: planeNode]; 


SCNNode *lightNode = [SCNNode node]; 
lightNode.light = [SCNLight light]; 
lightNode.light.type = SCNLightTypeSpot; 
lightNode.light.spotInnerAngle = 0; 
lightNode.light.spotOuterAngle = 45; 
lightNode.light.shadowRadius = 10.0; 
lightNode.light.zFar = 10000; 
lightNode.light.shadowColor = [UIColor colorWithRed: 0.0 green: 1.0 blue:0.0 alpha: 1.0]; 
lightNode.castsShadow = shadows; 
lightNode.position = SCNVector3Make(100, 100, 170); 
[_baseNode addChildNode:lightNode]; 

SCNNode *lightNode2 = [SCNNode node]; 
lightNode2.light = [SCNLight light]; 
lightNode2.light.type = SCNLightTypeAmbient; 
lightNode2.light.color = [UIColor colorWithRed: 0.3 green: 0.3 blue:0.3 alpha: 1.0]; 
[_baseNode addChildNode: lightNode2]; 

[_scene.rootNode addChildNode: _baseNode]; 

}

Répondre

6

vous devez définir castsShadow sur le SCNLight (au lieu de sur le SCNNode qui contient la lumière t).

+0

Je le fais déjà dans le code fourni ici. J'ai maintenant essayé de tourner castShadow sur tout sauf le spot Light, mais cela ne fonctionne pas non plus. – Max

+0

êtes-vous? Je vois 'lightNode.castsShadow = shadows;' au lieu de 'lightNode.light.castsShadow = ombres;' – mnuages

+0

Désolé, j'étais stupide. Maintenant, cela fonctionne comme un charme. Au début, je n'ai pas compris ce que les docs voulaient, alors je n'ai pas compris que vous vouliez dire la lumière réelle. Je vous remercie!! – Max