I'm trying to create a spot light that illuminates a cube. The surface underneath should then show a shadow. Unfortunately I wasn't able to achieve this. The light ignores the cube and casts the light on both - the surface and the cube - regardless that the cube is in the way.
How it looks like:
The code, I just set castsShadow to YES on every node for testing, but nothing so far helped:
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];
}
you have to set castsShadow
on the SCNLight
(instead of on the SCNNode
that holds the light).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With