ios – 使用SCNAction移动SCNLight

前端之家收集整理的这篇文章主要介绍了ios – 使用SCNAction移动SCNLight前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个聚光灯,使用下面的代码创建,在我的所有节点上投射阴影:

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,但闪烁仍然存在.有方向性,我实际上放弃了大部分阴影.如果我稍后创建一个新的光节点,似乎我有两个“太阳”,这当然是不可能的.最终目标只是让一个无限的光线从左边平行于场景照射,将所有阴影投射到右边.有任何想法吗?

解决方法

@H_403_24@ 构建节点树以保持聚光灯和相机.

比如,将cameraRigNode创建为没有几何体的SCNNode.以与现在相同的方式创建cameraContainerNode和spotlightNode.但是让他们成为cameraRigNode的孩子,而不是场景的根节点.

将moveAction应用于cameraRigNode.相机和灯光现在都会一起移动.

猜你在找的iOS相关文章