SceneKit: добавление направленного света к узлу камеры не имеет никакого эффекта

Основываясь на рекомендациях в этом ответе, цель состоит в том, чтобы добавить окружающий свет к сцене вместе с направленным светом на камеру.

Это работает в Редакторе сцены 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 ответ

Решение

Создайте SCNNode, например, с именем cameraNode. Создайте SCNCamera и назначьте его свойству камеры cameraNode. Добавьте cameraNode к сцене (как дочерний узел rootNode).

После этого вы можете добавить осветительный узел в качестве дочернего узла cameraNode или, если это единственная камера, в качестве дочернего узла узла pointOfView (который теперь представляет узел CameraNode, который вы создали и добавили в сцену). Камера по умолчанию и ее узел pointOfView не являются частью иерархии объектов сцены.

Другие вопросы по тегам