2015-04-21 23 views
5

Tôi đang cố gắng tạo ra ánh sáng điểm chiếu sáng khối lập phương. Bề mặt bên dưới sẽ hiển thị một cái bóng. Thật không may tôi đã không thể đạt được điều này. Ánh sáng lờ đi khối lập phương và tạo ánh sáng trên cả hai - bề mặt và khối lập phương - bất kể khối lập phương đang cản đường.SceneKit - Chiếu sáng và đổ bóng

Làm thế nào nó trông giống như:

enter image description here

Mã này, tôi chỉ cần đặt castsShadow YES trên mỗi nút để thử nghiệm, nhưng không có gì cho đến nay đã giúp:

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

}

Trả lời

6

bạn phải đặt castsShadow trên SCNLight (thay vì trên SCNNode giữ t).

+0

Tôi đã làm điều đó trong mã mà tôi đã cung cấp ở đây. Tôi bây giờ cũng đã cố gắng biến castsShadow tắt trên tất cả mọi thứ nhưng spotLight, nhưng cũng điều này không hoạt động. – Max

+0

là bạn? Tôi thấy 'lightNode.castsShadow = shadows;' thay vì 'lightNode.light.castsShadow = shadows;' – mnuages

+0

Xin lỗi, tôi đã ngu ngốc. Bây giờ nó hoạt động như một sự quyến rũ. Lúc đầu, tôi không hiểu những gì các tài liệu muốn, sau đó tôi không hiểu rằng bạn có nghĩa là ánh sáng thực tế. Cảm ơn bạn!! – Max

Các vấn đề liên quan