【发布时间】:2016-06-05 21:25:02
【问题描述】:
我有一个聚光灯,用下面的代码创建,在我的所有节点上投射阴影:
spotLight.type = SCNLightTypeSpot
spotLight.spotInnerAngle = 50.0
spotLight.spotOuterAngle = 150.0
spotLight.castsShadow = true
spotLight.shadowMode = SCNShadowMode.Deferred
spotlightNode.light = spotLight
spotlightNode.eulerAngles = SCNVector3(x: GLKMathDegreesToRadians(-90), y: 0, z: 0)
spotlightNode.position = levelData.coordinatesForGridPosition(column: 0, row: playerGridRow)
spotlightNode.position.y = 1.5
rootNode.addChildNode(spotlightNode)
场景沿 z 轴移动,相机有一个无限动画让它移动:
let moveAction = SCNAction.moveByX(0.0, y: 0.0, z: CGFloat(-GameVariables.segmentSize / 2), duration: 2.0)
cameraContainerNode.runAction(SCNAction.repeatActionForever(moveAction))
但随着相机的移动,光线不会移动,所以过了一会儿,整个场景就变暗了。我想用相机移动灯光,但是如果我对灯光节点应用相同的移动动画,所有的阴影都会开始闪烁。我尝试将 SCNShadowMode 更改为 Forward 并将灯光类型更改为 Directional,但闪烁仍然存在。通过定向,我实际上失去了大部分阴影。如果我稍后创建一个新的灯光节点,我会觉得我有两个“太阳”,这当然是不可能的。最终目标只是让无限的光线从左侧平行于场景发光,将所有阴影投射到右侧。有什么想法吗?
【问题讨论】: