SceneKit:向摄像机节点添加定向光无效

时间:2018-02-21 21:10:23

标签: scenekit scnnode scnscene scnlight

根据建议in this answer,目标是为场景添加环境光以及相机的定向光。

这适用于Xcode场景编辑器,方向灯设置为70%白色,环境光设置为50%白色。方向灯的欧拉角使用默认值。

编码此安排失败。它好像没有添加定向光。对场景没有影响;好像只有环境光存在。

欧拉角的x分量的不同值没有区别 - 尝试了PI / 2,PI和其他值,但仍然没有变化。

然而,将方向灯添加到场景的根节点(scene.rootNode.addChildNode(directionalLightNode))确实会将光添加到场景中。

fileprivate func addLightNode() {
    // Create ambient light
    let ambientLightNode = SCNNode()
    ambientLightNode.light = SCNLight()
    ambientLightNode.light!.type = .ambient
    ambientLightNode.light!.color = UIColor(white: 0.70, alpha: 1.0)

    // Add ambient light to scene
    scene.rootNode.addChildNode(ambientLightNode)

    // Create directional light
    let directionalLight = SCNNode()
    directionalLight.light = SCNLight()
    directionalLight.light!.type = .directional
    directionalLight.light!.color = UIColor(white: 1.0, alpha: 1.0)
    directionalLight.eulerAngles = SCNVector3(x: 0, y: 0, z: 0)

    // Add directional light to camera
    let cameraNode = sceneView.pointOfView!
    cameraNode.addChildNode(directionalLight)
}

1 个答案:

答案 0 :(得分:3)

创建一个SCNNode,例如名称为cameraNode。 创建SCNCamera并将其分配给cameraNode的 camera 属性。 将cameraNode添加到场景中(作为rootNode的子节点)。

之后,您可以将灯光节点添加为cameraNode的子节点,或者将它作为唯一的摄像机添加为pointOfView节点的子节点(现在表示您创建并添加到场景中的cameraNode)。默认摄像头及其pointOfView节点不是场景对象层次结构的一部分。