【问题标题】:Moving SCNLight with SCNAction使用 SCNAction 移动 SCNLight
【发布时间】: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,但闪烁仍然存在。通过定向,我实际上失去了大部分阴影。如果我稍后创建一个新的灯光节点,我会觉得我有两个“太阳”,这当然是不可能的。最终目标只是让无限的光线从左侧平行于场景发光,将所有阴影投射到右侧。有什么想法吗?

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    构建一个节点树来保存聚光灯和相机。

    例如,将 cameraRigNode 创建为没有几何图形的 SCNNode。以与现在相同的方式创建 cameraContainerNode 和 SpotlightNode。但是让它们成为 cameraRigNode 的子节点,而不是场景的根节点。

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

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2018-04-13
      • 2015-06-24
      • 2016-07-10
      • 2020-06-26
      • 2019-08-11
      • 2015-06-25
      • 2015-01-22
      • 1970-01-01
      相关资源
      最近更新 更多