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:
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];
}
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
bist du? Ich sehe 'lightNode.castsShadow = shadows;' anstelle von 'lightNode.light.castsShadow = shadows;' – mnuages
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