我有一个聚光灯,用下面的代码创建,在我所有的节点上投射阴影:
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,但闪烁仍然存在。使用方向,我实际上松开了我的大部分阴影。如果我稍后创建一个新的灯光节点,就好像我有两个“太阳”,这当然是不可能的。最终的目标很简单,就是要有一个无限的光线,从左边平行于场景,将所有的阴影投射到右边。有什么想法吗?
发布于 2016-02-24 05:00:00
构建一个节点树来同时保存聚光灯和摄影机。
例如,将cameraRigNode创建为不带几何体的SCNNode。像现在一样创建cameraContainerNode和spotlightNode。但使它们成为cameraRigNode的子节点,而不是场景的根节点。
对cameraRigNode应用moveAction。现在,摄影机和灯光将一起移动。
https://stackoverflow.com/questions/35587744
复制相似问题