2015-04-21 12 views
5

Ich versuche ein Spot-Licht zu erzeugen, das einen Würfel beleuchtet. Die darunter liegende Oberfläche sollte dann einen Schatten zeigen. Leider konnte ich das nicht erreichen. Das Licht ignoriert den Würfel und wirft das Licht auf beide - die Oberfläche und den Würfel - ungeachtet dessen, dass der Würfel im Weg ist.SceneKit - Beleuchtung und Schatten werfen

Wie es aussieht:

enter image description here

Der Code, habe ich castsShadow auf YES nur auf jedem Knoten für die Prüfung, aber bisher nichts geholfen:

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]; 

}

Antwort

6

müssen Sie castsShadow auf die SCNLight setzen (anstatt auf die SCNNode, die das Licht hält t).

+0

Ich mache das bereits in dem Code, den ich hier bereitgestellt habe. Ich habe jetzt auch versucht, CastShadow auf alles außer dem SpotLight auszuschalten, aber das funktioniert auch nicht. – Max

+0

bist du? Ich sehe 'lightNode.castsShadow = shadows;' anstelle von 'lightNode.light.castsShadow = shadows;' – mnuages

+0

Entschuldigung, ich war dumm. Jetzt funktioniert es wie ein Zauber. Zuerst habe ich nicht verstanden, was die Ärzte wollten, dann habe ich nicht verstanden, dass du das eigentliche Licht gemeint hast. Vielen Dank!! – Max

Verwandte Themen